问题标签 [ipcopen3]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
305 浏览

perl - 如何影响 Perl IPC::Open3 输出的宽度?

我有以下 Perl 代码,并希望它完全按照/bin/ls在终端中调用的方式显示。例如,在一个大小为 100 列的终端上,它会在插入换行符之前打印多达 100 个字符的输出。相反,此代码每行输出打印 1 个文件。我觉得这涉及为IO::Pty实例分配一些终端设置,但我已经尝试过这种变体,但没有运气。

更新:<$READER>用一个调用替换了,sysread希望原始代码可能只是有缓冲问题,但从接收的输出sysread仍然是每行一个文件。

更新:我添加了显示我尝试通过该clone_winsize_from方法更改 IO::Pty 大小的代码。这并没有导致输出有任何不同。

更新:据我所知(通过阅读 1.12 版的 IPC::open3 代码),您似乎无法在不open3创建管道而不是dup文件句柄的情况下传递 IO::Handle 类型的变量。这意味着在调用它isatty时不返回真值,然后强制自己进入“每行一个文件”模式。lsls

我想我只需要自己做一个 fork/exec 并处理 I/O 重定向。

0 投票
2 回答
2642 浏览

perl - 简单的open3示例不起作用

我正在尝试制作一个主 perl 脚本调用子 perl 脚本并通过管道进行交互。

我已经为大师编写了这段代码:

这是给孩子的:

但是当我启动Master时,他只是在阅读孩子的反应时挂了。

知道我做错了什么,为什么?

0 投票
1 回答
689 浏览

perl - IPC::Open3::open3() 不适用于 perl 5.14.2 和 perl 5.10.1?

在我们的一个模块中,我们检查给定的二进制文件 ( varnishd) 是否存在,如果存在,我们运行额外的测试。

为了执行检查,我们使用IPC::Open3,像这样(为了清楚起见,示例被剥离):

在带有perl 5.10.1的 Debian Squeeze 或 Ubuntu Natty 下,如果varnishd在系统上找不到,则会65280为我打印。如果您将 更改$binaryperl,则(正确)打印0.

但是,对于 Ubuntu Precise 和perl 5.14.2,这不再以相同的方式工作,并产生以下结果:

例如,当我将 更改为$binary存在的东西时,perl它可以正常工作并打印0.

阅读其他问题和答案,看起来我想研究IPC::Run,但实际上我想:

  • 了解这种行为差异
  • 如果可能的话,避免更多的依赖

编辑:忘了提到这些东西是在chroot环境下运行的,包括 Squeeze 和 Precise 系统,如果这完全相关(/dev例如文件系统差异?)。

0 投票
1 回答
116 浏览

perl - 为什么 IPC::Open3 调用 cmd.exe 而不是请求的程序?

我在 Windows 7 上的 Perl 5.16.3 x64(用 VC10 编译)上运行它。

当我运行这样的事情时:

我可以在进程列表中看到调用的实际命令IPC::Open3是:

当然,这会创建一个带有实际调用的子进程:

因此,我得到的是pid与 cmd.exe 对应的,而不是 perl.exe 对应的。

该文档没有提及有关此调用顺序的任何内容或有关 Windows 上不同行为的任何内容。我这里没有 Linux/Unix 机器来测试它,但我敢打赌它不会在那里做类似的事情(如果有人可以测试,如果我错了,请告诉我)。

无论如何,我想知道为什么IPC::Open3要这样做?为什么不直接在该命令中调用 perl?

提前感谢您的任何评论。

0 投票
1 回答
708 浏览

windows - 使用 Windows、IPC::Open3 和 IO::Socket->socketpair() 时,Perl 选择在 sysread 上返回 undef

我发现了这个示例(由@ikegami 发布),说明了一种在使用套接字的 Windows 上使用 IPC::Open3 的方法。问题是,当我运行它时,我得到一个错误一个现有的连接被远程主机强行关闭sysread。该命令运行,select工作正常,但sysread得到的是一个undef而不是预期0的文件结尾。对于所有命令,此行为并不相同。如果我将命令更改为echo Hello World!它不会导致错误。知道这里发生了什么吗?

以下是示例中的代码:

0 投票
1 回答
549 浏览

perl - perl: IPC::Open3 无法使用 FCGI 打开 STDERR

我正在用我的 fcgi 脚本测试 Git::Repository。我既无法创建 git 对象,也无法使用该模块运行任何 git 命令。IPC::Open3::open3 失败并出现以下错误:

不是 /usr/local/lib/perl/5.10.1/FCGI.pm 第 125 行的 GLOB 引用

我在 FCGI::OPEN() 中添加了一个咯咯声,在 IPC::Open3::xopen() 中添加了一个警告,这就是我得到的:

FCGI::OPEN() 仅在打开 STDERR 时调用。STDIN 和 STDOUT 没有达到 FCGI::OPEN()。我查看了 IPC::Open3 ,这是失败的地方:

我可以用 IPC::Run::start 替换 open3 ,一切正常。但我真的很想了解这里的 STDERR 出了什么问题。是 FCGI.pm 或 Open3.pm 的错误还是我做错了什么?

我在 debian 挤压上运行带有 libapache2-mod-fcgid 1:2.3.6、libfcgi-perl 0.71-1 和 libcgi-fast-perl 5.10.1 的 apache 2.2.16。Perl 版本是 5.10.1。

如何重现:

0 投票
1 回答
396 浏览

perl - Perl fork 进程使用 open3

我有一个 perl 脚本,其中我正在分叉一个子进程。这是我正在做的事情:

现在,我想捕获 X.pl 的错误以显示在我的脚本中。但据我了解,这是不可能起诉 exec 的。

我还有哪些其他选择?

在我的情况下如何使用 open3?

谢谢!

0 投票
3 回答
671 浏览

perl - 将 IPC::Open3 与 perlcritic 一起使用

我想抑制子进程中的输出并只读stderr。perlfaq8建议执行以下操作:

但随后perlcritic争论使用裸字文件句柄

我唯一能设计的是将select新打开的描述符/dev/null改为 on STDOUT,如下所示:

但是perlcritic不喜欢使用 ofselect。有更优雅的解决方案吗?

0 投票
2 回答
169 浏览

perl - perl IPC:Open3 最小通过 perlcritic?

我正在阅读 perlcritic 文档以避免反引号并在此处使用 IPC::Open3:

http://perl-critic.stacka.to/pod/Perl/Critic/Policy/InputOutput/ProhibitBacktickOperators.html

我试图找到最不冗长的选项,它将起作用并满足 perlcritic:

但它抱怨以下错误:

有任何想法吗?

编辑:好的,这就是我所拥有的。除非有办法简化它,否则我会坚持这一点:

0 投票
2 回答
224 浏览

apache - perl / embperl -- IPC::Open3

我有 2 种格式 perl 和 embperl 的示例程序

perl 版本作为 CGI 工作,但 embperl 版本不工作。

任何建议或解决方案的指针将不胜感激

操作系统:Linux 版本 2.6.35.6-48.fc14.i686.PAE (...) (gcc 版本 4.5.1 20100924 (Red Hat 4.5.1-4) (GCC)) #1 SMP Fri Oct 22 15:27: 53 世界标准时间 2010

注意:我最初将此问题发布到 perlmonks [x]和 embperl 邮件列表[x],但没有得到解决方案。

perl 工作脚本

emberl 非工作脚本

这是我收到的输出