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

2024-01-29

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

@output = `$cmd`;

我想更改此设置,以便如果命令挂起并且在很长时间后没有返回值,那么我会终止该命令。我将如何异步运行它?


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

  • 您可以使用 fork 来完成此操作(perldoc -f fork)
  • 或使用线程(perldoc 线程)。这两者都使得将返回的信息传递回主程序变得困难。
  • 在支持它的系统上,您可以设置警报(perldoc -f Alarm),然后在信号处理程序中进行清理。
  • 您可以使用 POE 或 Coro 等事件循环。
  • 您可以使用 open() 或分别使用 open2 或 open3 (参见 IPC::Open2、IPC::Open3)来启动程序,同时通过文件句柄获取其 STDOUT/STDERR,而不是使用反引号。对其运行非阻塞读取操作。 (perldoc -f select 并可能谷歌“perl 非阻塞读取”)
  • 作为 openX() 的更强大的变体,请查看 IPC::Run/IPC::Cmd。
  • 大概有很多我半夜都想不起来的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Perl 中异步运行系统命令? 的相关文章

  • 使用 Visual Studio Code 调试 Perl

    我今天刚开始使用 Perl 并安装了活动Perl https en wikipedia org wiki ActivePerl5 24 1 一切都很顺利 我能够创建我的测试程序testPerl pl与简单的print命令并运行它consol
  • 如何修复 Math::BigInt 调用的 Math::Pari 中的“`as_number' 不是 Pari 函数名称”?

    在 Perl 5 8 5 上 我看到问题中列出的错误 我正在运行这些版本模块 数学 BigInt 1 89 数学 BigInt FastCalc 0 19 数学 BigInt GMP 1 24 数学 BigInt Pari 1 13 数学
  • 无法在 Perl 中找到 DBI.pm 模块

    我使用的是 CentOS 并且已经安装了 Perl 5 20 并且默认情况下存在 Perl 5 10 我正在使用 Perl 5 20 版本来执行 Perl 代码 我尝试使用 DBI 模块并收到此错误 root localhost perl
  • perl - 子进程向父进程发送信号

    我编写了以下代码来测试孩子和父母之间的信号传递 理想情况下 当子进程向父进程发出 SIGINT 时 父进程应该在新的迭代中返回并等待用户输入 我在 perl 5 8 中观察到了这一点 但在 perl 5 6 1 我被要求使用 中 父级实际上
  • Perl 脚本中“不在某个 shell 下运行”是什么意思?

    在许多 Perl 脚本中 特别是在著名的 CPAN 发行版中 我发现以下代码 eval exec usr bin perl w S 0 1 if 0 not running under some shell 我想知道它是做什么用的 Than
  • Perl `join` 生成多行字符串

    我有这个程序来对两个数组进行排序 usr bin perl w movies movies txt open FHD movies die could not open movies n movies
  • 在 Perl 中检测全局破坏

    我想检测我的物体是否被DESTROY作为全局破坏的一部分 并打印出警告 因为这显然是一个错误并导致数据丢失 显而易见的方法似乎是 sub DESTROY my self shift if i am in global destruction
  • Perl:非阻塞管道 - 只收到一条消息

    几周前我问了一个关于实现非阻塞单父多子管道的问题 mob 巧妙地回答了这个问题here https stackoverflow com questions 52723489 perl one parent many children sin
  • getoptions 函数 perl 多值不起作用

    具有以下 getoptions 功能 iifiles 参数是可选的 如果提供的话它可以是一对多 但是当我运行此函数时收到错误消息 选项规范错误 Perl 在Solaris 10 上运行 不确定需要为iiles 提供哪些多值选项 GetOpt
  • Perl:模板工具包的替代品

    我使用模板工具包来扩展现有的领域特定语言 verilog 已经超过 3 年了 虽然总的来说我对此感到满意 但主要的刺激性是 当出现语法 undef 错误时 错误消息不包含用于调试错误的正确行号信息 例如我会收到一条消息 指示 0 未定义 因
  • Java 相当于 Perl 的 s/// 运算符?

    我有一些代码正在从 Perl 转换为 Java 它大量使用了正则表达式 包括s 操作员 我已经使用 Perl 很长时间了 但仍然习惯 Java 的做事方式 特别是 字符串似乎更难使用 有谁知道或有一个完全实现的Java函数s 这样它就可以处
  • Perl 正则表达式匹配模式的多个实例并替换

    我有一个看起来像这样的字符串 abc 1 2 3 something here foo 10 6 34 somethingelse here def 1 2 another 我想将此字符串拆分为一个数组 其中包含 abc 1 2 3 som
  • 为什么这个特定 Perl 脚本的线程版本比非线程版本慢 200 倍?

    A 推介会 http migo sixbit org papers Perl Threads by 米哈埃尔 戈伊克曼 http migo sixbit org 2003 年 Perl 会议上的文档包含两个质数查找脚本的示例 One htt
  • 如何使用 Perl 和正则表达式将 SQL 文档转换为 ColdFusion 脚本?

    我需要将 SQL 语句文档转换为 ColdFusion 文档 我对正则表达式只有一点经验 而且我是 Perl 超级新手 我昨天刚刚自学了它的基础知识 所以我可以完成这项任务 我正在尝试用 Perl 编写的脚本匹配和替换模式 该脚本保存为 B
  • 检查程序是否正在运行,如果不在 perl 中则运行它

    我想知道如何检查程序是否正在运行 如果没有则运行该程序 使用 Kill 函数向要检查的进程 ID 发送 0 零 信号 如果进程存在 函数返回true 否则返回false Example check if process 1525 is ru
  • 如何强制 Perl 按需重新编译使用“/o”编译的正则表达式?

    技术问题 给定一个正则表达式 my regEx qr whatever myVar oxi Notice o for compile once 强制重新编译的最有效方法是什么一经请求 例如 当我从程序逻辑中知道 myVar值改变 而不下降
  • 如何在 Perl 中运行匿名函数?

    sub print 1 sub print 1 我尝试了各种方法 都是错误的 sub 将为您提供指向该函数的指针 因此您必须通过引用调用 sub print Hello world n gt 另一种简单的方法 如所指出的布拉戈维斯特 布尤克
  • 在 Perl 中查找标量变量的数据类型

    我有一个接受用户输入的函数 输入可以是整数 浮点数或字符串 我有三个重载函数 应该根据输入数据的数据类型调用它们 例如 如果用户输入一个整数 比如100 则应该调用具有整数参数的函数 如果用户输入字符串 例如 100 则应调用具有字符串参数
  • 使用 ActivePerl 时为什么必须指定带有备份扩展的 -i 开关?

    除非我使用备份扩展指定它们 否则我无法就地编辑在 ActivePerl 下运行的 Perl 单行代码 C gt perl i ape splice F 2 0 q inserted text qq F n file1 txt Can t d
  • “get”在 Perl 中不起作用

    我是 Perl 新手 在过去的几天里 我制作了一些简单的脚本 通过 get 将网站的源代码保存到我的计算机上 他们做了他们应该做的事情 但不会获得论坛网站的内容 非论坛网站工作得很好 知道发生了什么事吗 这是问题块 my url http

随机推荐

  • QT:隐藏 QML 调试警告

    QML 调试已启用 仅在安全环境中使用此功能 我实际上正在为 QtCreator 项目开发 Python 测试软件 该项目需要使用 QML 调试 python 软件正在运行构建的项目并测试其功能 我想实际上隐藏该消息而不禁用 QML 调试
  • 蓝牙设备发现错误

    我尝试使用以下代码来发现蓝牙设备 import java io BufferedReader import java io IOException import java io InputStreamReader import java u
  • ElasticSearch 和 Nest 过滤不起作用

    我运行一个查询 返回 10 个结果 我的文档中有一个名为 Type 的属性 对于某些记录 此属性的值为空字符串 对于其他一些记录 该属性的值为 AudioAlbum 或 AudioRington 我想做两件事 1 从搜索结果中排除其 Typ
  • SwiftUI 中的 Alert + ProgressView(活动指示器)

    Is there any way to add Activity View Indicator into SwiftUI Alert somewhere I m just curious because I haven t found an
  • 将 tf.distribute 策略与 tf.keras 模型子类化结合使用

    我目前有一个 tf keras 模型子类 但无法使用 GPU 分发策略 尽管 Tensorflow 网站上声明我可能收到一个错误 告诉我相反的情况 我发现的一种解决方案是将模型包装在 tf keras models Model 中 但这导致
  • 重新组装分段上传中生成的文件块

    我正在使用优秀的 flow js 库来处理文件上传 这是一个可恢复的 HTML5 上传 会在服务器上生成一堆必须重新组装的块 例如 foo mov 可能会变成 timestamp foomov 1 timestamp foomov 2 ti
  • 发布时的 GitHub Actions 创建的工作流触发器不起作用

    我有一个GitHub 操作 https docs github com en actions在我的存储库的主分支上实现的工作流程 它创建了一个新的release https docs github com en github adminis
  • deque::insert() 在索引处?

    我如何insert 一堆物品到中间deque在线性时间内 我要插入的项目是not可通过 STL 风格的迭代器访问 有一个deque insert iterator pos const T x 函数占据位置pos as deque itera
  • 如何在 Three.js 中根据对象位置和旋转来正确旋转 raycaster

    我有 8 个从 Object3D 到不同方向的光线投射器用于碰撞检测 我想根据对象旋转来旋转它们指向的方向 我已经遵循了解决方案here https github com mrdoob three js issues 1606 光线投射器开
  • CUDA 中的稀疏矩阵向量乘法

    我正在尝试在 GPU 上实现矩阵向量乘法 使用 CUDA 在我的 C 代码 CPU 中 我将矩阵加载为密集矩阵 然后使用 CUDA 执行矩阵向量乘法 我还使用共享内存来提高性能 知道我的矩阵是稀疏矩阵 如何以有效的方式加载矩阵 下面是我的
  • 如何通过 *ngFor 在 Angular 2 TypeScript 前端显示 json 数组

    下面是 angular2 简单的前端页面 table class table tr th title th th description th tr tr td notes title td td notes body td tr tabl
  • MySQL:使用附加哈希字段的唯一文本字段

    在我的 MySQL 数据库中 我有一个表定义如下 CREATE TABLE mytablex cs id mediumint 8 unsigned NOT NULL AUTO INCREMENT tag varchar 6 COLLATE
  • MySQL JOIN 行(如果存在)否则填充 NULL

    我有两张人名和财产表 有些还没有条目 我想创建所有人及其属性 如果可用 的完整列表 否则将他们与属性 NULL 一起列出 这是我的简化示例 names id name 1 Jon 2 Peter 3 Sam 4 Bruce 特性 names
  • 在多选模式下启用/禁用列表视图中的项目选择

    我在多选模式下为上下文菜单注册了一个列表视图 private void initListViewForContextMenu log d FilesFragment initListViewForContextMenu ListView l
  • 自定义 jqGrid 中的添加/编辑对话框

    抱歉 我不能发布图片 我太新了 在 jqGrid 添加 编辑对话框中 我想根据之前所做的选择加载可选项目的列表 在上图中 应根据条件选择中选择的值加载值选择 我相信要走的路线是使用 editoptions 对象中的 dataurl 但我在这
  • 找不到 javafx.controls JavaFX 11 / JDK 11.0.1 [重复]

    这个问题在这里已经有答案了 我正在使用 IntelliJ 我已经尝试过所有其他似乎对其他人都有效的解决方案 我收到一个错误 Caused by java lang IllegalAccessError class com sun javaf
  • 使用泛型参数关闭

    我在将以下函数编写为闭包时遇到问题 func myfunc
  • 删除 VSCode PHP 调试中的字符限制

    在 PHP 中进行调试并使用左侧的变量窗格时 将鼠标悬停在该变量 对象上时可以看到的字符数是有限的 无论如何 是否可以查看该变量的完整有效负载或除了必须使用之外的任何解决方法file put contents每次我想看到一个大的变量值 将变
  • jQuery data() 返回未定义,attr() 返回整数

    我有以下代码 alert embellishment data embellishmentId alert embellishment attr data embellishmentId 第一个警报返回undefined 而第二个警报返回一
  • 如何在 Perl 中异步运行系统命令?

    我目前有一个 Perl 脚本 它在系统上运行外部命令 收集输出 并根据返回的内容执行一些操作 现在 这是我运行它的方式 其中 cmd 是带有命令设置的字符串 output cmd 我想更改此设置 以便如果命令挂起并且在很长时间后没有返回值