将字符串附加到Sys.command输出的每一行

时间:2016-07-07 16:03:14

标签: ocaml

在使用异步库在一个终端中同时执行2个作业期间,最好区分哪个消息来自哪个作业。
有没有办法在执行第三方应用程序期间在Sys.command的每行输出的开头附加手动字符串? 例如:
job1:message1
job1:message2
job2:message1
我已经看到用Unix.open_process_in重定向输出的例子,但是,它会与Async一起工作吗?

1 个答案:

答案 0 :(得分:3)

我不确定您的设置的哪个部分是第三方。如果您可以控制命令行,并且在某种类Unix系统上运行,那么只需通过sed发送输出即可得到您想要的粗略近似值:

job1-command 2>&1 | sed -u 's/^/Job 1: /'

从unix命令行看起来像这样:

$ date 2>&1 | sed -u 's/^/Job 1: /'
Job 1: Thu Jul  7 18:54:04 PDT 2016
$ date erroneous 2>&1 | sed -u 's/^/Job 1: /'
Job 1: date: illegal time format

-u标志使输出响应更快(它关闭缓冲)。在某些系统(如OS X)上,-l标志代替了这一点。

如果您想将标准输出与标准错误分开,事情会变得更加复杂。

这可能对你想要的东西太粗糙了,但我希望它有用。