Python执行系统命令并返回结果

在Python中,我们经常需要执行系统命令来完成一些操作,比如调用系统工具、执行外部程序等。使用subprocess模块可以很方便地实现这一功能。在本文中,我们将详细介绍如何在Python中执行系统命令并获取返回结果。
subprocess模块简介
subprocess模块允许我们创建新的进程,连接它们的输入、输出和错误管道,并获取它们的返回码。通过subprocess模块,我们可以在Python中执行外部命令或者程序。
下面是一些subprocess模块中最常用的函数:
subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, shell=False, timeout=None, check=False, encoding=None, errors=None):运行标准的系统命令。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=()):更灵活的方式来执行系统命令。
在本文中,我们将重点介绍subprocess.run函数的用法。
使用subprocess.run执行系统命令
subprocess.run函数可以执行系统命令,并返回一个CompletedProcess对象,其中包含命令的返回码、标准输出和标准错误。下面是一个简单的示例,演示如何使用subprocess.run执行系统命令:
import subprocess
# 执行系统命令
result = subprocess.run(['ls', '-l'], stdout=subprocess.PIPE)
# 输出命令的返回码
print("Return code:", result.returncode)
# 输出命令执行结果
print("Output:\n", result.stdout.decode())
上面的代码调用subprocess.run(['ls', '-l'], stdout=subprocess.PIPE)来执行ls -l命令,并将结果存储在result对象中。然后我们打印了命令的返回码和标准输出。
接下来,我们将介绍一些常用的参数和技巧。
参数的含义
args:要执行的命令,以列表形式传入。stdin:指定输入,默认为None。stdout:指定标准输出,默认为None。stderr:指定标准错误,默认为None。shell:如果为True,则在shell中执行命令,默认为False。timeout:设置命令超时时间。check:如果为True,则在命令返回非零值时引发CalledProcessError异常。encoding:设置输出的编码。errors:设置解码错误时的处理方式。
获取标准输出和标准错误
在上面的示例中,我们通过result.stdout获取了标准输出。要获取标准错误,可以使用result.stderr。
import subprocess
result = subprocess.run(['ls', 'nofile'], stderr=subprocess.PIPE)
# 输出标准错误
print("Error:\n", result.stderr.decode())
检查命令的返回值
通过设置check=True参数,我们可以在命令返回非零值时引发CalledProcessError异常。
import subprocess
try:
subprocess.run(['ls', 'nofile'], check=True)
except subprocess.CalledProcessError as e:
print("Error code:", e.returncode)
使用Shell语法
如果要在命令中使用管道、通配符等shell语法,可以设置shell=True。
import subprocess
result = subprocess.run('ls | grep py', shell=True, stdout=subprocess.PIPE)
print("Output:\n", result.stdout.decode())
总结
在本文中,我们学习了如何在Python中使用subprocess模块执行系统命令并获取返回结果。通过subprocess.run函数可以轻松地执行命令,并获取标准输出和标准错误。
极客教程