使用Julia 0.5.1的顺序输入运行外部程序

时间:2017-03-20 01:23:25

标签: julia

我想运行一个外部程序,让我们调用它program,顺序管道输入到它的标准输入。让我们调用输入input_1input_2等。

然后我希望将程序的标准输出传送回内存,例如Julia数据结构,或者如果不可能,则写入文本文件。

我可以用:

运行外部程序
run(`program input_1 input_2`)

导致程序的标准输出显示在shell中。

但我需要按顺序提供输入,因此无法使用此方法。

我查看了External Programs文档页面,我相信我应该使用open函数,但我无法弄清楚如何使用它。

当我跑步时:

open(`program`)

外部程序抱怨它没有输入就无法运行。

This博文非常有用,我相信如下:

(si,pr) = writesto(`program`)
write(si,input_1)
...
write(si, input_2)

可能适用于较早版本的Julia,但已弃用writeto函数,如here所述。

此外,我希望程序在后台运行。目前它产生了一个新的终端窗口。我认为这可能是外部程序的一个功能,所以我不确定这是否可以在Julia中指定。

1 个答案:

答案 0 :(得分:2)

你可能想看看我最终在Gaston(一个基于gnuplot的绘图程序)中实现了什么。我需要启动gnuplot,然后通过stdin发送命令,同时通过stdout读取输出,并通过stderr读取任何错误。

我实现了一个popen3函数,该函数执行命令并将管道返回到stdin,stdout和stderr。功能在这里:https://github.com/mbaz/Gaston.jl/blob/master/src/gaston_aux.jl#L431

然后,我使用异步任务访问gnuplot的stdout和stderr管道(因为从它们读取是阻塞的)。你可以看到这里发生的事情:https://github.com/mbaz/Gaston.jl/blob/master/src/gaston_aux.jl#L5一直到第52行。