我想创建一个函数来执行python脚本,同时在执行时实时存储控制台输出。在
例如,我使用subprocess模块来运行示例.py,但我只在整个脚本运行后接收控制台输出,而不是在发生时获取控制台输出。在控制台上输入“再见”,然后在控制台上按“再见”等60秒输出
在示例.py在import time
print "hello world!"
time.sleep(60)
print "goodbye world"
下面是运行脚本的脚本示例.py并在之后存储控制台
^{pr2}$
这将在整个脚本执行后以字符串形式返回以下内容hello world!
goodbye world
注意:我不能更改python脚本示例.py. 我只能更改调用它的函数。在
除了实时获取控制台输出(如果可能的话),我还想获取导致控制台输出的python行。例如,我想实现以下目标import time
print "hello world!"
hello world
time.sleep(60)
print "goodbye world"
goodbye world
我也尝试过使用sys模块,但它不存储控制台输出:import sys
import inspect
class SetTrace(object):
def __init__(self, func):
self.func = func
def __enter__(self):
sys.settrace(self.func)
return self
def __exit__(self, ext_type, exc_value, traceback):
sys.settrace(None)
def monitor(frame, event, arg):
if event == "line":
print event
return monitor
with SetTrace(monitor):
exec(open('example.py',"r+").read())
这将返回下面的结果,并且它是实时的。在line
line
line
hello world!
line
line
goodbye world
line