萝卜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 2022-05-21 10:21  萝卜L  阅读(1105)  评论(0编辑  收藏  举报