在Python中使用run()方法运行命令行程序
在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属性将包含命令的输出。
