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

使用Python的run()函数运行Linux命令

发布时间:2023-12-24 16:19:59

在Python中,可以使用subprocess模块的run()函数来运行Linux命令。run()函数会创建一个子进程来执行命令,并等待命令执行完成后返回结果。

run()函数的基本语法如下所示:

subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, shell=False, check=False, timeout=None, encoding=None, errors=None, text=None, env=None, universal_newlines=None, **other_popen_kwargs)

参数解释:

- args:要执行的命令,可以是一个字符串或字符串列表。

- stdin:标准输入流,可以是一个字节流。

- input:标准输入的内容,可以是一个字符串。

- stdout:标准输出流,可以是一个文件对象。

- stderr:标准错误流,可以是一个文件对象。

- shell:是否使用shell来执行命令,默认为False。

- check:是否抛出异常来表示命令运行失败,默认为False。

- timeout:命令执行的超时时间,超过该时间则会抛出TimeoutExpired异常。

- encoding:输入输出的编码,默认为None。

- errors:编码错误处理策略,默认为None。

下面是一些运行Linux命令的示例:

1. 运行简单的命令,如ls

import subprocess

# 运行命令并打印输出
subprocess.run(['ls'])

# 运行命令并获取输出结果
result = subprocess.run(['ls'], capture_output=True, text=True)
print(result.stdout)

2. 运行带有参数的命令,如ls -l

import subprocess

# 运行命令并打印输出
subprocess.run(['ls', '-l'])

# 运行命令并获取输出结果
result = subprocess.run(['ls', '-l'], capture_output=True, text=True)
print(result.stdout)

3. 运行需要通过管道传递输入的命令,如grep

import subprocess

# 运行命令并获取输出结果
result = subprocess.run(['grep', 'Python'], input='Python is a programming language.', capture_output=True, text=True)
print(result.stdout)

4. 运行需要使用shell来执行的命令:

import subprocess

# 运行命令并获取输出结果
result = subprocess.run('echo "Hello, World"', shell=True, capture_output=True, text=True)
print(result.stdout)

5. 设置超时时间,如果命令运行时间超过指定时间,则会抛出TimeoutExpired异常:

import subprocess

# 运行命令并设置超时时间为1秒
try:
    subprocess.run(['sleep', '2'], check=True, timeout=1)
except subprocess.TimeoutExpired as e:
    print('Command timed out')

6. 获取命令的返回值和错误信息:

import subprocess

# 运行命令并获取返回值和错误信息
result = subprocess.run(['ls'], capture_output=True, text=True)

# 获取返回值
print(result.returncode)

# 获取标准输出
print(result.stdout)

# 获取标准错误
print(result.stderr)

需要注意的是,run()函数在Python 3.5及以上版本中可用。如果使用较旧的Python版本,可以使用Popen类来替代run()函数。