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

在Python中使用run()方法运行命令行程序

发布时间:2024-01-12 09:13:12

在Python中,可以使用subprocess模块的run()方法来运行命令行程序。run()方法允许你运行一个命令,等待其执行完成,并返回执行结果。

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)

这里是一些run()方法的重要参数:

- args:要执行的命令行程序及其参数,可以是一个字符串或一个列表

- capture_output:如果设置为True,则捕获标准输出和错误输出。默认为False

- shell:如果设置为True,则在一个shell中执行命令。默认为False

- cwd:设置当前工作目录

- timeout:设置命令执行的超时时间,单位为秒

- check:如果设置为True,并且命令返回非零退出状态,则会引发CalledProcessError异常

- encoding:设置输出的编码

- text:如果设置为True,则会返回字符串而不是字节流

下面是一些使用run()方法运行命令行程序的示例:

### 示例1:运行简单的命令行程序

import subprocess

# 运行ping命令
subprocess.run(['ping', 'www.google.com'], check=True)

在上面的例子中,ping www.google.com命令会被执行,并且 run()方法会等待执行完成。如果命令执行失败(退出状态非零),check=True选项会引发CalledProcessError异常。

### 示例2:捕获命令的输出

import subprocess

# 运行命令行程序,并捕获输出
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)

# 输出标准输出和错误输出
print(result.stdout)
print(result.stderr)

在上面的例子中,ls -l命令会被执行,并且result对象的stdout属性将包含命令的标准输出,stderr属性将包含命令的错误输出。

### 示例3:在当前工作目录中执行命令

import subprocess

# 设置当前工作目录
subprocess.run(['git', 'status'], cwd='/path/to/repository')

在上面的例子中,git status命令将在/path/to/repository目录中执行。

### 示例4:设置超时时间

import subprocess

try:
    # 设置命令执行超时时间为5秒
    subprocess.run(['sleep', '10'], timeout=5)
except subprocess.TimeoutExpired:
    print("Command timed out")

在上面的例子中,sleep 10命令被执行,但是由于设置了5秒的超时时间,所以在超过5秒后命令被终止,并且TimeoutExpired异常被捕获。

### 示例5:运行带有管道的命令

import subprocess

# 运行带有管道的命令
result = subprocess.run('echo "Hello, World!" | grep -o "World"', shell=True, capture_output=True, text=True)

# 输出命令的输出
print(result.stdout.strip())

在上面的例子中,echo "Hello, World!" | grep -o "World"命令会在一个shell中运行,然后result对象的stdout属性将包含命令的输出。