gpt4 book ai didi

perl - 如何在 Perl 中异步运行系统命令?

转载 作者:行者123 更新时间:2023-12-04 03:00:02 24 4
gpt4 key购买 nike

我目前有一个 Perl 脚本,它在系统上运行一个外部命令,收集输出,并根据返回的内容执行一些操作。现在,这是我运行它的方式(其中 $cmd 是带有命令设置的字符串):

@output = `$cmd`;

我想改变它,所以如果命令挂起并且在这么长时间后没有返回值,那么我会终止命令。我将如何异步运行它?

最佳答案

有很多方法可以做到这一点:

  • 您可以使用 fork (perldoc -f fork)
  • 来执行此操作
  • 或使用线程(perldoc 线程)。这两者都使得将返回的信息传递回主程序变得困难。
  • 在支持它的系统上,您可以设置警报(perldoc -f 警报),然后在信号处理程序中进行清理。
  • 您可以使用像 POE 或 Coro 这样的事件循环。
  • 代替反引号,您可以使用 open() 或分别使用 open2 或 open3(参见 IPC::Open2、IPC::Open3)来启动程序,同时通过文件句柄获取其 STDOUT/STDERR。在其上运行非阻塞读取操作。 (perldoc -f select 并且可能是谷歌“perl 非阻塞读取”)
  • 作为 openX() 的一个更强大的变体,请查看 IPC::Run/IPC::Cmd。
  • 可能是我在半夜想不起来的吨。
  • 关于perl - 如何在 Perl 中异步运行系统命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1752357/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com