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

在Python中使用run()函数执行系统命令

发布时间:2023-12-24 16:18:48

在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.stdoutresult.stderr中。check=True会检查子进程的退出状态码,如果非零会抛出异常。

这些例子中,我们使用的是默认的输出方式,即将子进程的输出以文本形式输出。如果需要获取二进制形式的输出,可以将text参数设置为False。