问题标签 [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.
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
时不返回真值,然后强制自己进入“每行一个文件”模式。ls
ls
我想我只需要自己做一个 fork/exec 并处理 I/O 重定向。
perl - 简单的open3示例不起作用
我正在尝试制作一个主 perl 脚本调用子 perl 脚本并通过管道进行交互。
我已经为大师编写了这段代码:
这是给孩子的:
但是当我启动Master时,他只是在阅读孩子的反应时挂了。
知道我做错了什么,为什么?
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
为我打印。如果您将 更改$binary
为perl
,则(正确)打印0
.
但是,对于 Ubuntu Precise 和perl 5.14.2,这不再以相同的方式工作,并产生以下结果:
例如,当我将 更改为$binary
存在的东西时,perl
它可以正常工作并打印0
.
阅读其他问题和答案,看起来我想研究IPC::Run,但实际上我想:
- 了解这种行为差异
- 如果可能的话,避免更多的依赖
编辑:忘了提到这些东西是在chroot环境下运行的,包括 Squeeze 和 Precise 系统,如果这完全相关(/dev
例如文件系统差异?)。
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?
提前感谢您的任何评论。
windows - 使用 Windows、IPC::Open3 和 IO::Socket->socketpair() 时,Perl 选择在 sysread 上返回 undef
我发现了这个示例(由@ikegami 发布),说明了一种在使用套接字的 Windows 上使用 IPC::Open3 的方法。问题是,当我运行它时,我得到一个错误一个现有的连接被远程主机强行关闭sysread
。该命令运行,select
工作正常,但sysread
得到的是一个undef
而不是预期0
的文件结尾。对于所有命令,此行为并不相同。如果我将命令更改为echo Hello World!
它不会导致错误。知道这里发生了什么吗?
以下是示例中的代码:
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。
如何重现:
perl - Perl fork 进程使用 open3
我有一个 perl 脚本,其中我正在分叉一个子进程。这是我正在做的事情:
现在,我想捕获 X.pl 的错误以显示在我的脚本中。但据我了解,这是不可能起诉 exec 的。
我还有哪些其他选择?
在我的情况下如何使用 open3?
谢谢!
perl - 将 IPC::Open3 与 perlcritic 一起使用
我想抑制子进程中的输出并只读stderr。perlfaq8建议执行以下操作:
但随后perlcritic
争论使用裸字文件句柄。
我唯一能设计的是将select
新打开的描述符/dev/null
改为 on STDOUT
,如下所示:
但是perlcritic
不喜欢使用 ofselect
。有更优雅的解决方案吗?
perl - perl IPC:Open3 最小通过 perlcritic?
我正在阅读 perlcritic 文档以避免反引号并在此处使用 IPC::Open3:
http://perl-critic.stacka.to/pod/Perl/Critic/Policy/InputOutput/ProhibitBacktickOperators.html
我试图找到最不冗长的选项,它将起作用并满足 perlcritic:
但它抱怨以下错误:
有任何想法吗?
编辑:好的,这就是我所拥有的。除非有办法简化它,否则我会坚持这一点:
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 非工作脚本
这是我收到的输出