如何在 perl 脚本中生成其他程序并立即继续 Perl 处理?

发布于 2024-12-16 15:45:42 字数 89 浏览 0 评论 0原文

如何在 perl 脚本中生成其他程序并立即继续 Perl 处理(而不是暂停直到生成的程序终止)? 是否可以在生成的程序运行时处理来自该程序的输出,而不是等待它结束?

How to spawn other programs within perl script and immediately continue Perl processing (instead of halting until the spawned program terminates) ?
Is it possible to process the output coming from the spawned program while it is running instead of waiting it to end?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

风吹短裙飘 2024-12-23 15:45:42

您可以使用 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::Open3IPC::Cmd 模块。

You can use open for this (to run the program /bin/some/program with two command-line arguments):

open my $fh, "-|", "/bin/some/program", "cmdline_argument_1", "cmdline_argument_2";
while (my $line = readline($fh)) {
    print "Program said: $line";
}

Reading from $fh will give you the stdout of the program you're running.

The other way around works as well:

open my $fh, "|-", "/bin/some/program";
say $fh "Hello!";

This pipes everything you write on the filehandle to the stdin of the spawned process.

If you want to read and write to and from the same process, have a look at the IPC::Open3 and IPC::Cmd modules.

挽梦忆笙歌 2024-12-23 15:45:42

要在后台运行程序并“继续”,您所要做的就是添加“&”在命令末尾(我假设您使用的是 Linux)。例如:system("command &"); 请注意 system("command", "arg1", "&"); 不起作用,因为它会通过“&”到命令而不是 shell。您可以通过执行以下操作简单地打印命令的输出:print system("command");

To run a program in the background and "continue going" all you have to do is add "&" at the end of the command (I'm assuming you are using Linux). example:system("command &"); note that system("command", "arg1", "&"); will NOT work, since it will pass the "&" to the command and not to the shell. You can simply print the output of a command by doing: print system("command");

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文