📜  python subprocess print stdout while process running - Python (1)

📅  最后修改于: 2023-12-03 14:46:04.836000             🧑  作者: Mango

Python Subprocess Print Stdout While Process Running

如果你需要运行一个子进程并同时获取其输出,那么Python的subprocess模块就是你所需要的。

1. 同步获取输出

如果你只需要在子进程运行结束后获取其输出,可以使用subprocess.check_output函数来运行子进程并获取其输出。

import subprocess

output = subprocess.check_output(['ls', '-l'])
print(output.decode('utf-8'))

该代码会运行ls -l命令并获取其输出。decode函数用于将输出从字节流转换为字符串。

2. 异步获取输出

如果你需要在子进程运行期间获取输出,可以使用subprocess.Popen函数来创建一个子进程。同时,使用communicate方法与stdout管道来异步获取输出。

import subprocess

process = subprocess.Popen(['ping', '-c', '4', '127.0.0.1'], stdout=subprocess.PIPE)

while True:
    output = process.stdout.readline()
    if output == '' and process.poll() is not None:
        break
    if output:
        print(output.strip())

该代码会创建一个ping命令的子进程,并异步获取其输出。poll函数用于检查子进程是否已经结束,strip函数用于去除输出中的换行符。

3. 参考
  1. Python subprocess官方文档: https://docs.python.org/3/library/subprocess.html
  2. Python subprocess.Popen官方文档: https://docs.python.org/3/library/subprocess.html#subprocess.Popen