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

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

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函数可以轻松地执行命令,并获取标准输出和标准错误。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程