我有一个python函数,想用multiprocessing
包作为一个单独的进程运行它。
def run(ctx: Context):
print("hello world!")
return ctx
然后使用以下脚本将其作为单独的进程运行:
import multiprocessing
p = multiprocessing.Process(target=run, args=(ctx, ))
p.start()
p.join()
现在,我需要实时捕获上述进程的stdout
和stderr
,有没有类似这样的方法:
import subprocess
proc = subprocess.Popen(['python','fake_utility.py'],stdout=subprocess.PIPE)
while True:
line = proc.stdout.readline()
if not line:
break
但是我需要传递不运行Popen
命令的函数,当我在一个单独的进程中运行我的函数时,你知道我如何读取stdout
吗?
1条答案
按热度按时间nr7wwzry1#
我的方法是创建一个定制的上下文管理器,它可以用
io.String()
示例临时替换sys.stdout
和sys.stderr
,以捕获输出并返回它。为此,您需要使Process
的 target 成为一个新函数,它可以设置上下文管理器并返回结果,为此使用了multiprocessing.Queue
(顺便说一下,如果您希望run
将其结果返回给主进程,则无论如何都需要这样做):图纸: