Python中使用run()函数执行指定命令
在Python中,可以使用subprocess.run()函数执行指定命令。这个函数会创建一个新的子进程,然后在子进程中执行指定的命令。下面是subprocess.run()函数的基本语法:
subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, capture_output=False, shell=False, cwd=None, timeout=None, check=False, encoding=None, errors=None, text=None, env=None, universal_newlines=None)
- args:需要执行的命令,可以是一个字符串或者一个字符串的列表。如果是一个字符串,函数会将其作为一个Shell命令来执行。如果是一个列表,列表中的每个元素都会被当做一个独立的参数来执行。
- stdin:指定子进程的标准输入。可以是一个常规的文件对象,或者是一个类文件对象。
- input:指定子进程的输入内容,可以是一个字符串。
- stdout:指定子进程的标准输出。可以是一个常规的文件对象,或者是一个类文件对象。
- stderr:指定子进程的标准错误输出。可以是一个常规的文件对象,或者是一个类文件对象。
- capture_output:当设置为True时,stdout和stderr将被捕获到一个字节串对象中。该参数不能与stdout或stderr同时设置。
- shell:当设置为True时,命令将被解释为一个Shell命令。默认为False,也即默认执行的是一个普通的外部命令。
- cwd:指定子进程的工作目录。
- timeout:指定子进程的超时时间,单位为秒。如果在超时之前子进程未完成执行,将会抛出一个TimeoutExpired异常。
- check:当设置为True时,如果命令的返回值不为0,将会抛出一个CalledProcessError异常。
- encoding:指定子进程的输出的编码方式。
- errors:指定子进程的输出的错误处理方式。
- text:当设置为True时,子进程的输出将以文本模式进行处理。默认为None,也即自动选择文本或二进制模式。
- env:指定子进程的环境变量。
- universal_newlines:当设置为True时,子进程的输入和输出将以通用换行符模式进行处理。
下面是一些使用subprocess.run()函数的例子:
例子1:执行一个外部命令并等待其完成执行。
import subprocess
# 执行一个Shell命令
subprocess.run('ls -l')
# 执行一个外部命令
subprocess.run(['ls', '-l'])
例子2:使用stdout参数获取外部命令的输出。
import subprocess # 获取命令的输出并打印 result = subprocess.run(['ls', '-l'], stdout=subprocess.PIPE) print(result.stdout)
例子3:将一个字符串作为子进程的输入。
import subprocess # 将字符串作为子进程的输入 subprocess.run(['grep', 'Python'], input='Hello, Python!', encoding='utf-8')
例子4:捕获子进程的标准错误输出。
import subprocess # 捕获子进程的标准错误输出 result = subprocess.run(['command_not_exist'], stderr=subprocess.PIPE) print(result.stderr)
例子5:设定超时时间。
import subprocess
# 执行一个命令,设定超时时间为2秒
try:
subprocess.run(['sleep', '5'], timeout=2)
except subprocess.TimeoutExpired as e:
print("Timeout!")
例子6:检查命令的返回值,并捕获非零返回码的异常。
import subprocess
# 检查命令的返回值,并捕获非零返回码的异常
try:
subprocess.run(['command_not_exist'], check=True)
except subprocess.CalledProcessError as e:
print("Command execution failed with return code", e.returncode)
以上是使用subprocess.run()函数执行指定命令的一些例子。根据实际需要,可以根据函数的不同参数进行灵活的调整和组合,以满足特定命令执行的需求。
