首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Julia 0.5.1中的顺序输入运行外部程序

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

Stack Overflow用户
提问于 2017-03-20 01:23:25
回答 1查看 501关注 0票数 2

我想运行一个外部程序,让我们称它为program,然后将输入按顺序排列到它的标准输入。让我们调用输入input_1input_2等。

然后,我希望将程序的标准输出以管道方式输入内存,例如,朱莉娅数据结构,或者如果不可能,将其写入文本文件。

我可以通过以下方式运行外部程序:

代码语言:javascript
复制
run(`program input_1 input_2`)

这将导致将程序的标准输出显示到shell。

但是,我需要按顺序提供输入,因此不能使用这种方法。

我查看了外部程序文档页面,我认为我应该使用open函数,但我不知道如何使用它。

当我跑步时:

代码语言:javascript
复制
open(`program`)

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

博客文章内容丰富,我相信如下所示:

代码语言:javascript
复制
(si,pr) = writesto(`program`)
write(si,input_1)
...
write(si, input_2)

本可以使用较早版本的Julia,但writeto函数已被废弃,正如讨论过的这里那样。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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的文档仍然不存在,所以我仍然认为这个解决方案是非官方的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42894447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档