欢迎访问宙启技术站
智能推送

Python中使用run()函数执行指定命令

发布时间:2023-12-27 18:36:57

在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时,stdoutstderr将被捕获到一个字节串对象中。该参数不能与stdoutstderr同时设置。

- 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()函数执行指定命令的一些例子。根据实际需要,可以根据函数的不同参数进行灵活的调整和组合,以满足特定命令执行的需求。