本文使用的运行环境为 Python3
最直接的调用
import os
os.system("ls")
这样就可以调用系统的ls
命令了,但是这样没法获取ls
的输出。
通过 subprocess 调用
import subprocess
process = subprocess.Popen("ls", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
这里通过将stdout
重定向到subprocess.PIPE
上来取得ls
命令的输出,如果想将stderr
也重定向到subprocess.PIPE
上,stderr=subprocess.STDOUT
改成stderr=subprocess.PIPE
即可。
如何通过 subprocess 读取命令行的输出
我们使用 subprocess 执行命令行后,可以通过process.stdout.read()
来读取命令行输出,不过process.stdout.read()
返回的是bytes
,要想取得str
,可以直接调用process.stdout.read().decode('utf-8')
。
最终的代码大概是这样的
import subprocess
process = subprocess.Popen("ls", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
command_output = process.stdout.read().decode('utf-8')
# 处理ls的返回值
注意
有些命令行是异步执行的不会马上返回输出,所以有时候我们要先等这个命令行执行完毕才能从stdout读出来数据。这个时候要加上process.wait()
import subprocess
process = subprocess.Popen("ls", shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
process.wait()
command_output = process.stdout.read().decode('utf-8')
# 处理ls的返回值