Python 子进程:完整指南
在官方 python 文档中,我们可以读到子进程应该用于访问系统命令。 例如,子进程模块使我们能够生成进程,连接到它们的输入/输出/错误管道,并接收返回码。
Python 子进程
Python subprocess 模块允许您生成新进程,连接到它们的输入/输出/错误管道,并获取它们的返回码。
Python subprocess 是一个内置模块,可让您启动 Python 程序。 此外,子流程模块为创建和使用附加流程提供了一致的界面。
调用子流程的建议方法是对它可以处理的所有用例使用 run() 函数。 底层的 Popen 接口可以直接用于更高级的用例。
在 Python 3.5 中添加了 run() 函数; 如果您需要保持与旧版本的兼容性,请参阅旧的高级 API 部分。
它提供了比其他一些可用模块更高级别的接口,旨在替换 os.system()、os.spawn*()、os.popen*()、popen2.*() 和命令等函数.*()。
为了更容易将子进程与其他模块进行比较,这里的许多示例重新创建了用于 os 和 popen 的那些。
如何在 Python 中启动一个进程
要在 Python 中启动进程,请使用 subprocess.Popen() 函数。下面的程序启动 UNIX 程序“cat”,第二个参数是参数。
它相当于’cat mod.py’。 您可以使用任何参数启动程序。
现在,在您的 python项目文件夹中,创建两个文件。
- 应用程序.py
- 模组.py
在 mod.py 中,编写以下代码。
// mod.py student = { 'name': 'Krunal', 'enno': 21, 'college': 'vvp college' }
现在,在 app.py 文件中编写以下代码。
// app.py from subprocess import Popen, PIPE process = Popen(['cat', 'mod.py'], stdout=PIPE, stderr=PIPE) stdout, stderr = process.communicate() print(stdout)
请参阅下面的输出。
process.communicate() 调用从进程读取输入和输出。 标准输出是一个进程输出。 仅当发生错误时才会写入 stderr。 如果要等待程序完成,可以调用 Popen.wait() 函数。
子进程调用()
Subprocess.call() 是一个内置函数,可用于启动程序。 call() 函数接受一个列表,其中第一个参数必须是程序名称。
句法
subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)
请参阅以下代码示例。
它列出了当前目录中的所有文件和文件夹。
保存进程输出 (stdout)
我们可以直接使用 check_output 获取程序的输出并将其存储在字符串中。 该方法定义如下。
subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, universal_newlines=False)
请参阅以下示例。
// app.py import subprocess s = subprocess.check_output(["echo", "AppDividend"]) print("s = " + s.decode('utf-8'))
请参阅下面的输出。
将 shell 参数设置为 true 值会导致子进程生成中间 shell 进程并告诉它运行命令。 默认是直接运行命令。
// app.py import subprocess # Command with shell expansion subprocess.call('echo $HOME', shell=True)
查看输出。
子流程中的错误处理
call() 函数的返回值是程序的退出代码。 调用者负责解释它以检测错误。
check_call() 函数的工作方式与 call() 函数类似,只是检查了退出代码,如果它指示发生了错误,则引发 CalledProcessError 异常。
请参阅以下代码。
// app.py import subprocess subprocess.check_call(['false'])
查看输出。
这就是本教程的内容。
后 Python 子流程:完整指南首次出现在 AppDividend 上。