我想运行一个外部程序,让我们称它为program,然后将输入按顺序排列到它的标准输入。让我们调用输入input_1、input_2等。
然后,我希望将程序的标准输出以管道方式输入内存,例如,朱莉娅数据结构,或者如果不可能,将其写入文本文件。
我可以通过以下方式运行外部程序:
run(`program input_1 input_2`)这将导致将程序的标准输出显示到shell。
但是,我需要按顺序提供输入,因此不能使用这种方法。
我查看了外部程序文档页面,我认为我应该使用open函数,但我不知道如何使用它。
当我跑步时:
open(`program`)外部程序抱怨没有输入就无法运行。
这博客文章内容丰富,我相信如下所示:
(si,pr) = writesto(`program`)
write(si,input_1)
...
write(si, input_2)本可以使用较早版本的Julia,但writeto函数已被废弃,正如讨论过的这里那样。
另外,我希望程序在后台运行。目前,它产生了一个新的终端窗口。我认为这可能是外部程序的一个函数,所以我不确定这是否可以在Julia中指定。
发布于 2017-03-20 14:56:58
您可能想看看我在Gaston (一个基于gnuplot的绘图程序)中实现了什么。我需要启动gnuplot,然后通过stdin发送命令,同时通过stdout读取输出,并通过stderr读取任何错误。
我实现了一个popen3函数,它执行一个命令并将管道返回到stdin、stdout和stderr。函数在这里:aux.jl#L431
然后,我使用异步任务(因为读取它们是阻塞的)访问gnuplot的stdout和stderr管道。您可以在这里看到这种情况:aux.jl#L5一直到第52行。
编辑(2019年6月):
Julia1.x中最好的解决方案是构建一个连接管道的pipeline,然后构建一个run来执行管道。有关Gaston中的当前实现,请参见这里。
不幸的是,Pipe的文档仍然不存在,所以我仍然认为这个解决方案是非官方的。
https://stackoverflow.com/questions/42894447
复制相似问题