萝卜L

导航

统计

lua execute io.popen command 命令 V1

Lua os.executeio.popen(read、write模式)

可用方式

命令 过程 命令 结果
os.execute 执行-等待执行完毕 一次性 无,需外部文件存储
hr=io.popen(..,'r') 执行-不等待执行完毕 一次性 ——
hr:readhr:close 等待执行完毕 ——
hw=io.popen(..,'w') 执行-不等待执行完毕 可追加 ——
hw:close 等待执行完毕 —— 无,需外部文件存储

耗时

popenw < popenr << popenr:close < popenr:read ≈ popenw:close < [popenw+file:read] ≈ [execute+file:read]

  • 单独的io.popen,不论读写,是异步的,很快。
  • 关闭close、popenr:read,等待执行完,外部阻塞过程,时间无意义。
  • 从popenr句柄读(read)比从文件读稍快。

策略

  • 执行确定的命令:
    尽量拼接命令(command & command_2 & ..),一次性发送命令,避免多次io.popen+close。
    • 无需等待执行完毕,无需结果,则popenw/popenr,延迟close;
    • 无需等待执行完毕,需结果,则popenr>popenw,延迟read+close;
    • 需等待执行完毕,
      • 无需结果,则execute,或popenr/popenw+close
      • 需结果,则popenr-handle:read-close > [execute≈[popenw-close]]-file:read
  • 执行不确定的命令,popenw-write >> 多次popenr/execute。

相关

参见"CommandPipe"。

参考测试

不完善,略..

posted on   萝卜L  阅读(1354)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
历史上的今天:
2021-05-21 SolidWorks 管道 routing
点击右上角即可分享
微信分享提示