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

使用Python的run()函数调用外部程序

发布时间:2023-12-23 00:22:07

在Python中,可以使用subprocess模块的run()函数来调用外部程序。run()函数是Python 3.5版本新增的方法,它替代了之前的call()函数。run()函数执行给定的命令,等待命令完成,并返回一个CompletedProcess对象。

以下是一个简单的例子,演示如何使用run()函数调用外部程序:

import subprocess

# 运行命令 "ls -l" 并打印输出
result = subprocess.run(['ls', '-l'], stdout=subprocess.PIPE)
print(result.stdout.decode())

# 运行命令 "echo Hello World" 并打印输出
result = subprocess.run(['echo', 'Hello World'], shell=True, stdout=subprocess.PIPE)
print(result.stdout.decode())

在上面的例子中,我们使用run()函数调用了两个外部程序。第一个命令是ls -l,它会列出当前目录下的文件和子目录的详细信息。我们使用stdout=subprocess.PIPE参数将命令的输出重定向到Python中,然后使用decode()方法将字节数据转换为字符串,并打印出来。

第二个命令是echo Hello World,它会在终端输出 "Hello World"。由于echo是一个Shell内建命令,而非外部可执行程序,我们需要将shell参数设置为True,以便能够正确执行命令。同样地,我们将命令的输出重定向到Python中,并打印出来。

run()函数还提供了许多其他的参数,使你能够控制命令的执行方式。例如,你可以使用stdin参数将输入流传递给命令,使用check参数来决定是否检查命令的返回值,使用cwd参数来设置工作目录等。

以下是一个示例演示如何使用run()函数传递输入流和检查命令返回值:

import subprocess

# 运行命令 "grep -n 'Python' test.txt" 并打印输出
with open('test.txt', 'w') as file:
    file.write('This is a test file.
Python is great.')
result = subprocess.run(['grep', '-n', 'Python', 'test.txt'], stdout=subprocess.PIPE)
print(result.stdout.decode())

# 运行命令 "ls -l",并检查命令的返回值
result = subprocess.run(['ls', '-l'], check=True)

在上面的例子中,我们首先创建了一个名为 test.txt 的文本文件,并在其中写入了一些文本。然后,我们使用 grep -n 'Python' test.txt 命令,它会在文件中查找包含 "Python" 字符串的行,并打印输出,结果将被重定向到 Python。

然后,我们使用了 check=True 参数来检查 ls -l 命令的返回值。如果命令返回一个非零的返回值,run() 函数将引发一个 CalledProcessError 异常。

通过运行外部程序,并处理其输入和输出,你可以在 Python 中与外部命令进行交互。这使得 Python 成为一个强大的工具,让你能够在代码中调用和控制外部程序的执行。