如何从外部进程python2获取实时日志

2024-03-29 11:23:23 发布

您现在位置:Python中文网/ 问答频道 /正文

在文档文件夹中创建文件夹temp

/My Documents/temp

将这几行保存为worker.pyPython脚本:

import time 
from datetime import datetime
for i in range(10):
    print '%s...working on iteration %s' % (datetime.now(), i)
    time.sleep(0.2) 
print '\nCompleted!\n'

将下面的代码另存为caller.py

import subprocess
cmd = ['python', 'worker.py']
stdout = subprocess.check_output(cmd)
print stdout

(请注意,两个Python脚本都保存在同一个文件夹中)。

现在使用OS X终端或Windows CMD窗口将当前目录更改为您创建的文件夹:

cd /My Documents/temp

现在运行:

python caller.py

完成此过程需要2秒钟。完成后,它会立即打印整个进度日志:

2018-01-20 07:52:14.399679...working on iteration 0
...
2018-01-20 07:52:16.216237...working on iteration 9
Completed!

我不希望打印日志(在流程已经完成之后立即打印),而是希望有一个实时的进度更新。我想得到的每一个印刷行的过程中,在同一时刻发生。 所以,当我运行python worker.py命令时,它会给我一行一行的实时更新。如何实现?你知道吗


Tags: pyimport脚本文件夹datetimetimeonmy
1条回答
网友
1楼 · 发布于 2024-03-29 11:23:23

要从子进程获取实时提要,可以在来电.py你知道吗

import time 
import subprocess

# Start worker process
p = subprocess.Popen(['python', '-u', 'worker.py'], stdout=subprocess.PIPE)

# Loop forever
while True:

    # Get new line value
    l = p.stdout.readline()

    # Stop looping if the child process has terminated
    if p.poll() is not None:
        break

    # Print the line
    print l

请注意中的-u子流程.Popen,您需要无缓冲标准输出。 https://docs.python.org/3/using/cmdline.html#cmdoption-u

使用readline()每次从子进程输出中读取一行。请注意子进程何时打印'\n完成!\你要读三遍。 https://docs.python.org/3/tutorial/inputoutput.html#methods-of-file-objects

在本例中,循环将一直运行,直到子进程终止。 https://docs.python.org/3/library/subprocess.html#subprocess.Popen.poll

相关问题 更多 >