【发布时间】:2011-11-16 19:58:42
【问题描述】:
如何在 perl 脚本中生成其他程序并立即继续 Perl 处理(而不是暂停直到生成的程序终止)? 是否可以在生成的程序运行时处理它的输出而不是等待它结束?
【问题讨论】:
标签: perl multiprocessing
如何在 perl 脚本中生成其他程序并立即继续 Perl 处理(而不是暂停直到生成的程序终止)? 是否可以在生成的程序运行时处理它的输出而不是等待它结束?
【问题讨论】:
标签: perl multiprocessing
您可以为此使用open(使用两个命令行参数运行程序/bin/some/program):
open my $fh, "-|", "/bin/some/program", "cmdline_argument_1", "cmdline_argument_2";
while (my $line = readline($fh)) {
print "Program said: $line";
}
阅读$fh 将为您提供正在运行的程序的标准输出。
反之亦然:
open my $fh, "|-", "/bin/some/program";
say $fh "Hello!";
这会将您在文件句柄上写入的所有内容通过管道传输到衍生进程的标准输入。
如果您想在同一个进程中读写,请查看IPC::Open3 和IPC::Cmd 模块。
【讨论】:
要在后台运行程序并“继续”,您只需在命令末尾添加“&”(我假设您使用的是 Linux)。示例:system("command &"); 请注意 system("command", "arg1", "&"); 将不起作用,因为它将“&”传递给命令而不是 shell。您可以通过执行以下操作简单地打印命令的输出:print system("command");
【讨论】: