Lua os.execute
,io.popen
(read、write模式)
可用方式
命令 | 过程 | 命令 | 结果 |
---|---|---|---|
os.execute |
执行-等待执行完毕 | 一次性 | 无,需外部文件存储 |
hr=io.popen(..,'r') |
执行-不等待执行完毕 | 一次性 | —— |
hr:read 、hr: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"。
参考测试
不完善,略..