subprocess模块是Python标准库中的一个模块,用于创建和管理子进程。subprocess 模块允许我们启动一个新进程,并连接到它们的输入/输出/错误管道,从而获取返回值。使用上比 os.system(cmd) 更友好。
subprocess.run(command, shell=True, stdin=None, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding=“utf-8”, timeout=1,check=False )
import subprocess
def runcmd(command):
ret = subprocess.run(command,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE,encoding="utf-8",timeout=1)
if ret.returncode == 0:
print("success:",ret)
else:
print("error:",ret)
subprocess.getoutput() 和 subprocess.getstatusoutput() 函数是来自 Python 2.x 的 commands 模块的两个遗留函数。它们隐式的调用系统shell,并且不保证其他函数所具有的安全性和异常处理的一致性。它们从Python 3.3.4开始才支持Windows平台。
import subprocess
def runcmd(command):
subprocess.getoutput(command)
#subprocess.getstatusoutput(command)
执行指定的命令,返回命令执行状态,其功能类似于os.system(cmd)。call()和check_call()函数返回的是命令执行的状态码,而不是CompletedProcess类实例,所以对于它们而言,stdout和stderr不适合赋值为subprocess.PIPE;
import subprocess
def runcmd(command):
subprocess.call(command)
#subprocess.check_call(command)
Popen 是 subprocess的核心,子进程的创建和管理都靠它处理。上面介绍的call(), run() 等函数都是基于subprocess.Popen类实现的。
class subprocess.Popen(args, bufsize=-1, executable=None, stdin=None, stdout=None, stderr=None,
preexec_fn=None, close_fds=True, shell=False, cwd=None, env=None, universal_newlines=False,
startupinfo=None, creationflags=0,restore_signals=True, start_new_session=False, pass_fds=(),
*, encoding=None, errors=None)
import time
import subprocess
def runcmd(command):
subp = subprocess.Popen(command,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE,encoding="utf-8")
subp.wait(2)
if subp.poll() == 0:
print(subp.communicate()[1])
else:
print("失败")
runcmd("ls -l")
subprocess — Subprocess managemen