在Python中使用run()函数执行系统命令
在Python中,可以使用subprocess模块中的run()函数来执行系统命令。run()函数是subprocess模块中的一个高级函数,用于运行一个新的子进程,并等待其完成。
run()函数的基本语法如下:
subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, shell=False, timeout=None, check=False, encoding=None, errors=None, text=None, env=None, universal_newlines=None)
参数解释:
- args:要执行的命令,可以是一个字符串,也可以是一个字符串列表。如果是字符串,使用默认的shell解释器执行命令;如果是列表,则将列表的 个元素作为命令,其余元素作为命令的参数。
- stdin:如果设置为PIPE,可以向子进程的标准输入发送数据。
- input:将字符串传递给子进程的标准输入。
- stdout:如果设置为PIPE,可以从子进程的标准输出获取数据。
- stderr:如果设置为PIPE,可以从子进程的标准错误输出获取数据。
- shell:如果为True,将使用shell解释器来执行命令。在Unix系统下,默认为False;在Windows系统下,默认为True。
- timeout:设置子进程运行的最长时间。
- check:如果设置为True,当子进程返回非零退出状态码时,会抛出CalledProcessError异常。
- encoding:设置输出的编码格式。
- errors:设置字符编码错误处理方式。
- text:如果为True,表示使用文本模式。
- env:设置子进程的环境变量。
- universal_newlines:允许文本模式及跨平台换行符转换。
下面是一些使用run()函数执行系统命令的例子:
例子1:执行ls命令(Unix系统)
import subprocess result = subprocess.run(["ls", "-l"], capture_output=True, text=True) print(result.stdout)
上述代码使用run()函数执行ls命令,参数["ls", "-l"]指定了命令及其参数。capture_output=True, text=True设置为True,将子进程的输出捕获到变量result.stdout中,并以文本模式输出。
例子2:执行dir命令(Windows系统)
import subprocess
result = subprocess.run("dir", capture_output=True, shell=True, text=True)
print(result.stdout)
上述代码使用run()函数执行dir命令,参数"dir"是一个字符串形式的命令。shell=True将使用默认的shell解释器执行命令。其他部分与例子1相同。
例子3:执行ping命令并获取输出
import subprocess result = subprocess.run(["ping", "www.baidu.com"], capture_output=True, text=True) print(result.stdout)
上述代码使用run()函数执行ping命令,参数["ping", "www.baidu.com"]指定了命令及其参数。其他部分与例子1相同。
例子4:执行命令并获取输出及错误输出
import subprocess result = subprocess.run(["ls", "-l", "/path/to/nonexistent/directory"], capture_output=True, text=True, check=True) print(result.stdout) print(result.stderr)
上述代码使用run()函数执行ls命令,并指定了一个不存在的目录作为参数。capture_output=True将子进程的输出及错误输出都捕获到result.stdout和result.stderr中。check=True会检查子进程的退出状态码,如果非零会抛出异常。
这些例子中,我们使用的是默认的输出方式,即将子进程的输出以文本形式输出。如果需要获取二进制形式的输出,可以将text参数设置为False。
