热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

无法读取管道

如何解决《无法读取管道》经验,为你挑选了1个好方法。

我不知道我是不是意外地删除了或者在某处输入了一个错字,但突然之间我的一些代码停止了工作.出于某种原因,从$ in中没有读取任何行.

use Win32::Job;
use IO::Handle; 

STDOUT->autoflush;

pipe my $in, my $out;

my $job = Win32::Job->new;

sub flush_pipe{
    while (defined(my $line = <$in>)) {
       chomp($line);
       print($line);

    }
}
my $pid = $job->spawn("cmd", "cmd /C \"ipconfig\"",
    {
        stdout=>$out
    }
);
flush_pipe();

编辑:通过反复试验,我最终发现在冲洗管道之前我必须关闭$ out文件句柄.



1> zdim..:

一个管道是单向的.它连接的每个进程都可以读或写.

$in有两个文件句柄,并且两个父母和子女看到他们俩.如果孩子要写和父母要读,就像你的代码一样,那么孩子必须先关闭它不会使用的句柄($out),父母必须关闭它未使用的句柄,spawn.否则你会遇到死锁.

STDOUT从模块开始一个子进程(或者更确切地说,它在Windows近似)和其重定向$out到管道的书写端,close $out.

一些非常基本的代码应该涵盖这一点

use strict;
use warnings;
use feature 'say';

pipe my $in, my $out;

my $pid = fork // die "Can't fork: $!";

if ($pid == 0) { # child
    close $in;
    print $out "hi ";         # can't read this yet (no newline) ...
    sleep 1;
    say   $out "from child";  # now the other end can read it
    close $out;
    exit;
}

# parent
close $out;

say while <$in>;
close $in;

wait;

当您希望打印件立即可供读取器使用时(直到在代码外部缓冲)发送换行符.在执行任何其他操作之前,在每个过程中关闭管道的未使用端.

我现在无法在Windows上编写代码,但在您的代码中父必须spawn(之后flush_pipe()).

这里的术语"刷新"可以与编写器中的代码或Perl的IO缓冲区清除有关; 你的代码read_pipe只是读取管道.所以我要更改名称,$in等等.


推荐阅读
  • 如何使用Ping命令来测试网络连接?当网卡安装和有关参数配置完成后,可以使用ping命令来测试一下网络是否连接成功。以winXP为例1、打开XP下DOS窗口具体操作是点击“开始”菜 ... [详细]
  • 本文深入探讨了UNIX/Linux系统中的进程间通信(IPC)机制,包括消息传递、同步和共享内存等。详细介绍了管道(Pipe)、有名管道(FIFO)、Posix和System V消息队列、互斥锁与条件变量、读写锁、信号量以及共享内存的使用方法和应用场景。 ... [详细]
  • 解决VSCode中文乱码问题的综合方案
    在使用VSCode进行开发时,尤其是涉及Python编程,可能会遇到中文乱码的问题。本文总结了多种有效的解决方案,帮助开发者快速解决这一常见问题。 ... [详细]
  • Spring Boot + MyBatis Plus 实现SQL语句打印的两种方法
    本文详细介绍了如何在Spring Boot和MyBatis Plus环境中实现SQL语句打印的两种方法,包括配置文件设置和多数据源环境下的动态配置。适合开发者在日常开发和调试过程中参考。 ... [详细]
  • 当我在命令行登录MySQL后,无法访问任何依赖数据库连接的PHP应用。此问题每次都会出现。以下是复现问题的具体步骤及解决方案。 ... [详细]
  • 本报告详细记录了在2018-2019学年网络安全技术课程中的实验过程,重点探讨了PC平台上逆向工程的基本方法和利用缓冲区溢出(BOF)漏洞的技术。通过一系列实验,加深了对计算机系统安全性的理解。 ... [详细]
  • 本文详细介绍了在不同操作系统中查找和设置网卡的方法,涵盖了Windows系统的具体步骤,并提供了关于网卡位置、无线网络设置及常见问题的解答。 ... [详细]
  • Logback使用小结
    1一定要使用slf4j的jar包,不要使用apachecommons的jar。否则滚动生成文件不生效,不滚动的时候却生效~~importorg.slf ... [详细]
  • 本文详细介绍了如何在Python3环境中配置Appium1.4.6,并指导如何连接模拟器进行自动化测试。通过本文,您将了解从环境搭建到模拟器连接的完整流程。 ... [详细]
  • 在Win10上利用VS2015构建Caffe2环境
    本文详细介绍如何在Windows 10操作系统上通过Visual Studio 2015编译Caffe2深度学习框架的过程。包括必要的软件安装、环境配置以及常见问题的解决方法。 ... [详细]
  • Flowable 6.6.0 表单引擎在Web应用中的集成与使用
    本文档提供了Flowable 6.6.0版本中表单引擎在Web应用程序中的配置和使用指南,包括表单引擎的初始化、配置以及在Web环境下的具体实现方法。 ... [详细]
  • 本文探讨了如何利用Python处理来自不同来源的脚本输入,包括命令行参数、文件重定向和管道输出。 ... [详细]
  • Python 中使用 Pyecharts 绘制雷达图详解
    本文将详细介绍如何在 Python 环境中利用 Pyecharts 库来创建美观且功能丰富的雷达图。适合需要图形化展示多维度数据的开发者和研究人员。 ... [详细]
  • 题目描述了一个病毒检测问题,要求使用AC自动机算法统计目标文本中多个模式串的出现次数。 ... [详细]
  • Python库在GIS与三维可视化中的应用
    Python库极大地扩展了GIS的能力,使其能够执行复杂的数据科学任务。本文探讨了几个关键的Python库,这些库不仅增强了GIS的核心功能,还推动了地理信息系统向更高层次的应用发展。 ... [详细]
author-avatar
川人是天下的盐恋歌_334
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有