问题标签 [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 投票
1 回答
107 浏览

perl - embperl - 使用 IPC::Open3 调用 wkhtmltopdf. 标准输入不工作

在 embperl 中,我尝试使用 IPC::Open3 模块调用 wkhtmltopdf。

我从 wkhtmltopdf 获得输出(感谢ikegami),但没有输入到 wkhtmltopdf。

这与这个问题有关:perl / embperl — IPC::Open3

这是代码:

0 投票
1 回答
634 浏览

perl - Perl 中的 waitpid 和 open3

如果 open3 调用的程序的输出太大(超过 65536),waitpid 将永远运行。

WNOHANG解决了这个问题:

但是现在返回码是 $? 是-1。这是waitpid的返回码。它可以通过肮脏的黑客来解决:

做这些事情的正确方法是什么?

UPD。似乎肮脏的黑客并不总是有效。

0 投票
2 回答
286 浏览

perl - 两次使用 open3 时 IPC::Open3 中的警告

我正在使用IPC::Open3来获取 Hans Lub在这里给出的建议。

我的问题是open3调用第一次正常工作,但随后的调用返回警告:

我使用的代码示例如下所示:

如果我想让其他人解决我的问题,我深表歉意,但我似乎无法解决这个问题,并且查看 Perl 模块超出了我目前的理解范围。

0 投票
0 回答
46 浏览

perl - win32 perl IPC::Open3() 轮询 fhandles

我需要一种方法来轮询(即:非阻塞 IO)由 Win32 版本的 open3() 创建的句柄,使用标准的核心 perl 项。

我知道这行不通的事情:

  • OPEN3 - 在 Windows 上,不返回正常的文件句柄
  • Windows 上的 select(),仅适用于套接字
  • IPC::Run() 不允许我与子进程交互

哦,我希望“期望”是 Windows 上 perl 的一部分——但事实并非如此。

有什么建议么?

0 投票
1 回答
142 浏览

perl - 如何在 perl 中使用标量作为 open3 的输入

我有一个标量,我想输入 open3 作为输入。例如

但是,open3它位于不同的模块中:

然后在另一个文件中:

问题是,在Example::Runner我有一个可以从中读取的参考资料中<$in>,但我需要的是我可以加上前缀的东西,'<&'以便 open3 将它用作STDIN它执行的命令。知道我如何将对句柄的引用转换为 open3 可以用于它的东西STDIN吗?

编辑

很明显,我的人为示例还不够……我不直接使用 {{DBI}} 的原因是这段代码实际上是我用于无足迹自动化的更大代码体的一部分。换句话说,我有一个由 30 多台服务器组成的环境,我的管理员没有安装任何特殊工具(只是 RHEL 5/6 中的标准工具)。这些服务器分为服务器集(db、app、web)、每个环境(local、dev、qa、beta、prod)、每个项目(...)。无论如何,一项非常常见的任务是将数据库从一个地方复制到另一个地方。我们使用类似于以下的命令来完成此操作:

这是将我们的生产数据库克隆回开发环境的最基本版本(更典型的版本包括每个命令上的许多开关和中间的许多管道命令)所以,我围绕这个(IPC::Open3::Callback::*)编写了一个抽象库。在此过程中,我们遇到了需要执行一些在复制数据库后需要运行的 SQL 命令。因此,我们添加了运行任意 SQL 脚本集的功能(基于克隆操作的源和目标)。我可以用这样的命令运行它们:

但是我遇到了需要修改 SQL 脚本的一些内容,所以我想把它吞进去,做一些工作,然后将它提供给$command_runneras STDIN也就是说,我尝试使用fileno来处理这个问题:

但如果$in_handle是标量 ref,它就行不通了。不管怎样,这就是说来话长了。

0 投票
1 回答
226 浏览

perl - IPC::Open3 转换字符编码

我观察到 IPC::Open3 参数作为脚本一部分的奇怪行为。

我给出了一个包含 ISO-8859-15 的字符串。就在调用 open3() 之前(字面意思是之前的语句),字符串是正确的(用printand验证Data::Dumper)。

然而,一旦子进程启动,参数现在是 UTF-8 编码的。我已经使用所需的可执行文件(freebcp)和包装脚本验证了这一点。我最终编写了一个包装脚本,将所有参数转换回 ISO-8859-15。

是什么导致了这种行为?LANG 设置为 en_AU.ISO-8859-15。它在其他主机上正常工作。我找不到对 binmode() 的任何引用

0 投票
1 回答
212 浏览

perl - 没有选择的 IPC::open3 错误处理

下面的代码工作正常,但我想在不使用 IO::Select 的情况下实现相同的目标 - 我尝试了一些东西但没有任何效果,因为我对 perl 不太熟悉。

我想在写入 ERRLOG 后终止我的进程。

我试过下面的代码 -

但是 while 循环没有在 if 条件内执行。

0 投票
1 回答
497 浏览

perl - IPC::Open3 并确定孩子是否正在等待输入

上面的代码是我正在编写的脚本的一部分,它需要运行另一个脚本(称为子脚本)。孩子可能会或可能不会提示输入,这取决于 /var/tmp 中是否存在 cookie 文件(在 CentOS5 / perl 5.8.8 上编写的两个脚本)

我需要确定孩子是否以及何时等待输入,以便父母可以从父母的 STDIN 传递输入。我还需要使用 open3 打开子进程,因为我需要父进程通过 Perl::Critic 的残酷(严重性 1)检查。

我包括了评论,因为当cookie文件已经设置时,我至少可以让父母正确地调用孩子,因为在这种情况下孩子不会等待输入。

我四处检查试图找到如何确定孩子是否正在等待输入的示例。我发现的一个例子使用了 strace ( http://www.perlmonks.org/?node_id=964971 ),我觉得这对于我想做的事情来说可能太复杂了。

任何指导我的链接将不胜感激。

0 投票
1 回答
134 浏览

c++ - 我们在 C 或 C++ 中是否有类似于 IPC::Open3 的 perl

我使用 perl 的 open3 来运行命令,自定义命令的行为就像一个 shell,它接受输入并显示输出并等待另一个输入,直到给出退出

现在我必须使用相同的命令并用 C 语言编写它,我们是否有类似于 C 或 C++ 中的 IPC::Open3 的东西?