使管道保持打开状态
我有一个
app
,它从stdin
中读取内容,并在换行符之后返回结果为stdout
一个简单的(愚蠢的)示例:
$ app
Expand[(x+1)^2]<CR>
x^2 + 2*x + 1
100 - 4<CR>
96
打开和关闭“ 0”需要大量的初始化和清理工作(它是计算机代数系统的接口),因此我希望将其保持在最低水平。
我想在Python中打开此过程的管道,将字符串写入stdin
,并从stdout
读出结果。 Popen.communicate()
对此不起作用,因为它关闭了文件句柄,需要重新打开管道。
我已经尝试了一些与此相关问题类似的方法:
在不中断管道的情况下与一个进程多次通信?但我不确定如何等待输出。很难先验地知道the0要完成多长时间才能处理完手头的输入,因此我不想作任何假设。我想我的大部分困惑都来自这个问题:在子进程中进行非阻塞读取。Python中的PIPE指出混合高级功能和低级功能不是一个好主意。
编辑:
抱歉,我之前没有提供任何代码,被打断了。到目前为止,这是我已经尝试过的方法,并且似乎可以正常工作,我只是担心某些错误会被忽略:
from subprocess import Popen, PIPE
pipe = Popen([\"MathPipe\"], stdin=PIPE, stdout=PIPE)
expressions = [\"Expand[(x+1)^2]\", \"Integrate[Sin[x], {x,0,2*Pi}]\"] # ...
for expr in expressions:
pipe.stdin.write(expr)
while True:
line = pipe.stdout.readline()
if line != \'\':
print line
# output of MathPipe is always terminated by \';\'
if \";\" in line:
break
潜在的问题呢?
没有找到相关结果
已邀请:
2 个回复
体悉
痴浪墨
作为参数传递给
。这将使该进程的stdin可作为通用的类似文件的对象使用:
这会将子进程的输出直接定向到python进程的stdout。如果您需要读取输出并首先进行一些编辑,那也是可以的。查看http://docs.python.org/library/subprocess.html#popen-objects。