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项目文件夹中,创建两个文件。

  1. 应用程序.py
  2. 模组.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)

请参阅下面的输出。

Python 子流程教程

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'))

请参阅下面的输出。

保存进程输出 (stdout)

将 shell 参数设置为 true 值会导致子进程生成中间 shell 进程并告诉它运行命令。 默认是直接运行命令。

// app.py

import subprocess

# Command with shell expansion
subprocess.call('echo $HOME', shell=True)

查看输出。

带有示例的 Python 子流程教程

子流程中的错误处理

call() 函数的返回值是程序的退出代码。 调用者负责解释它以检测错误。

check_call() 函数的工作方式与 call() 函数类似,只是检查了退出代码,如果它指示发生了错误,则引发 CalledProcessError 异常。

请参阅以下代码。

// app.py

import subprocess

subprocess.check_call(['false'])

查看输出。

子流程中的错误处理

这就是本教程的内容。

后 Python 子流程:完整指南首次出现在 AppDividend 上。

资讯来源:由0x资讯编译自APPDIVIDEND,版权归作者Krunal所有,未经许可,不得转载
你可能还喜欢