在python中从子流程接收返回数据
我正在使用在python中从子流程接收返回数据,python,subprocess,Python,Subprocess,我正在使用子进程从脚本生成一个进程。我的子进程接受一个JSON输入并执行一些操作,应该向主进程返回一些实时数据。如何从子流程执行此操作? 我正在尝试这样的事情。但这是一个错误 以下是五月的主要流程“main.py” 下面是我的子流程“handler.py” 但它抛出了一个错误 Traceback (most recent call last): File "./core/main.py", line 46, in <module> out = p.stdout.read(1)
子进程
从脚本生成一个进程。我的子进程
接受一个JSON输入并执行一些操作,应该向主进程返回一些实时数据。如何从子流程
执行此操作?
我正在尝试这样的事情。但这是一个错误
以下是五月的主要流程“main.py”
下面是我的子流程
“handler.py”
但它抛出了一个错误
Traceback (most recent call last):
File "./core/main.py", line 46, in <module>
out = p.stdout.read(1)
ValueError: I/O operation on closed file
回溯(最近一次呼叫最后一次):
文件“/core/main.py”,第46行,在
out=p.stdout.read(1)
ValueError:对关闭的文件执行I/O操作
我做错什么了吗
通信
读取子流程的所有输出并将其关闭。如果您希望能够在写入后读取进程,则必须使用通信
以外的其他工具,例如p.stdin.write
。或者,只需使用communicate
的输出即可;它应该有你想要的。communicate
读取子流程的所有输出并将其关闭。如果您希望能够在写入后读取进程,则必须使用通信
以外的其他工具,例如p.stdin.write
。或者,只需使用communicate
的输出即可;它应该具有您想要的功能。Popen.communicate()
在进程停止并返回所有输出之前不会返回。无法读取子进程的标准输出。请看以下内容的顶部:
与进程交互:向stdin发送数据从标准输出读取数据,并
stderr,直到到达文件末尾等待进程终止。重点是我的
如果要发送数据,然后在子进程仍在运行时以文本形式逐行读取输出,请执行以下操作:
#!/usr/bin/env python3
import json
from subprocess import Popen, PIPE
with Popen(command, stdin=PIPE, stdout=PIPE, universal_newline=True) as process:
with process.stdin as pipe:
pipe.write(json.dumps(data))
for line in process.stdout:
print(line, end='')
process(line)
如果需要用于较旧python版本的代码或存在缓冲问题,请参阅
如果您只想将数据传递给子进程并将输出打印到终端:
#!/usr/bin/env python3.5
import json
import subprocess
subprocess.run(command, input=json.dumps(data).encode())
如果您的实际子进程是Python脚本,那么考虑将它作为一个模块导入并运行相应的函数,参见.< /P> < P> <代码> Popen。无法读取子进程的标准输出。请看以下内容的顶部:
与进程交互:向stdin发送数据从标准输出读取数据,并 stderr,直到到达文件末尾等待进程终止。重点是我的 如果要发送数据,然后在子进程仍在运行时以文本形式逐行读取输出,请执行以下操作:#!/usr/bin/env python3
import json
from subprocess import Popen, PIPE
with Popen(command, stdin=PIPE, stdout=PIPE, universal_newline=True) as process:
with process.stdin as pipe:
pipe.write(json.dumps(data))
for line in process.stdout:
print(line, end='')
process(line)
如果需要用于较旧python版本的代码或存在缓冲问题,请参阅
如果您只想将数据传递给子进程并将输出打印到终端:
#!/usr/bin/env python3.5
import json
import subprocess
subprocess.run(command, input=json.dumps(data).encode())
如果您的实际子进程是Python脚本,那么考虑将它作为一个模块导入并运行相应的函数,参见.p/> <代码>进程<代码>从何而来?您可以使用
子流程popen
创建p
。流程从何而来?您可以使用子流程popen
创建p
。