gpt4 book ai didi

python - 在不破坏管道的情况下与进程多次通信?

转载 作者:行者123 更新时间:2023-12-04 23:03:07 24 4
gpt4 key购买 nike

这不是我第一次遇到这个问题,这真的让我很烦。
每当我使用 Python subprocess 打开管道时模块,我只能communicate用它一次,正如文档中指定的那样:Read data from stdout and stderr, until end-of-file is reached

proc = sub.Popen("psql -h darwin -d main_db".split(),stdin=sub.PIPE,stdout=sub.PIPE)
print proc.communicate("select a,b,result from experiment_1412;\n")[0]
print proc.communicate("select theta,zeta,result from experiment_2099\n")[0]

这里的问题是第二次,Python 不高兴。的确,他决定在第一次沟通后关闭文件:
Traceback (most recent call last):
File "a.py", line 30, in <module>
print proc.communicate("select theta,zeta,result from experiment_2099\n")[0]
File "/usr/lib64/python2.5/subprocess.py", line 667, in communicate
return self._communicate(input)
File "/usr/lib64/python2.5/subprocess.py", line 1124, in _communicate
self.stdin.flush()
ValueError: I/O operation on closed file

是否允许多次通信?

最佳答案

我想你误解了沟通...

http://docs.python.org/library/subprocess.html#subprocess.Popen.communicate

通信向另一个进程发送一个字符串,然后等待它完成......(就像你说的等待 EOF 监听标准输出和标准错误)

你应该做的是:

proc.stdin.write('message')

# ...figure out how long or why you need to wait...

proc.stdin.write('message2')

(如果您需要获取标准输出或标准错误,您将使用 proc.stdout 或 proc.stderr)

关于python - 在不破坏管道的情况下与进程多次通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42998103/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com