在Python中,可以使用subprocess模块来启动一个子进程并同时读取其输出和错误流。下面是一个示例代码:
import subprocess
def run_command(command):
# 启动子进程
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
# 读取输出和错误流
while True:
# 读取输出流
output = process.stdout.readline().decode('utf-8')
if output == '' and process.poll() is not None:
break
if output:
print(output.strip())
# 读取错误流
error = process.stderr.readline().decode('utf-8')
if error == '' and process.poll() is not None:
break
if error:
print(error.strip())
# 等待子进程结束
process.wait()
# 示例用法
run_command("ls -l")
在这个示例中,run_command函数接受一个命令作为参数,并使用subprocess.Popen启动一个子进程。然后使用stdout和stderr参数分别指定输出和错误流。在一个无限循环中,通过readline方法读取输出和错误流的每一行,并使用decode方法将字节转换为字符串。然后使用strip方法去除行尾的换行符并打印输出。如果读取到的行为空(即子进程结束),则退出循环。最后使用process.wait等待子进程结束。