下面是我的脚本,它使用下面的示例调用另一个脚本,并在执行完成后生成整个输出,同时期望它应该生成实时输出以及同时写入文件。
发生的事情是它不能逐行生成输出并最终打印整个输出。
./My_Tests.py ALL
TC 1 : PASSED
TC 2 : PASSED
Tatal Passed Tests : 2
Tatal Failed Tests : 0
My_Tests.py:
from subprocess import Popen, PIPE, STDOUT
with Popen("./tests.py", stdout=PIPE, stderr=STDOUT, bufsize=1, universal_newlines=True) as p, \
open('tests.log', 'ab') as file:
for line in p.stdout: # b'\n'-separated lines
print(line, end='') #new addition
sys.stdout.buffer.write(line)
file.write(line)
我也尝试使用以下命令,但它只在终端上打印,而不是在文件中保存输出 导入子流程
# Run command and redirect it by | tee to a file named out.txt
p = subprocess.Popen([command, '|', 'tee', 'out.txt'])
p.wait()
答案 0 :(得分:0)
问题和解决方案是什么:
我的tests.py文件有很多打印语句,我做错了:
这就是我所做的:
1.为上面的子流程代码创建了一个函数
2.为tests.py中的每个代码部分创建函数,并生成n个tests-n.py
3.然后一个接一个地调用子进程函数代码中的thiese tests-n.py。父文件现在是tests.py
from subprocess import Popen, PIPE, STDOUT
def logc(file, logfile):
with Popen(file, stdout=PIPE, stderr=STDOUT, bufsize=1, universal_newlines=True) as p, \
open(logfile, 'ab') as file:
for line in p.stdout: # b'\n'-separated lines
print(line, end='') #new addition
sys.stdout.buffer.write(line)
file.write(line)
os.system("> logs.py")
logc("tests1.py", "logs.py")
logc("tests2.py", "logs.py")
logc("tests3.py", "logs.py")
logc("tests3.py", "logs.py")