我有两个文件:
main.py
import subprocess
import shlex
def main():
command = 'python test_output.py'
logfile = open('output', 'w')
proc = subprocess.Popen(shlex.split(command), stdout=logfile)
if __name__ == "__main__":
main()
和test_output.py
from time import sleep
import os
for i in range(0, 30):
print("Slept for => ", i+1, "s")
sleep(1)
os.system("notify-send completed -t 1500")
子进程完成后,该过程的输出将写入logfile
中。有什么办法可以做到:
logfile
。 (不要像现在那样等待子进程完成。)还有其他问题(like this one)给出了逐行读取的解决方案,但它们使main.py
等待。是否可以在后台执行所有操作而无需等待main.py等待?
答案 0 :(得分:0)
文件处理程序的两个缓冲区(作为子进程)都可以设置为“行缓冲”,其中换行符导致转发每个对象的缓冲区。这是通过将buffer参数设置为1
来完成的,请参见open()命令和subprocess。
您需要确保子进程不会自行缓冲。通过查看您是否也在运行Python脚本,您要么需要在其中的代码中实现此功能,例如对于print语句使用flush = True:
print(this_and_that, flush=True)