Python子进程和Popen()及其示例

Python通过不同的模块和库提供了许多功能。当我们需要在Python应用程序中打开一个新进程时,我们可以使用 subprocess 图书馆及相关职能部门。

null

导入子流程模块

为了使用相关函数和库,我们应该导入 subprocess 图书馆。

import subprocess

使用call()函数启动子进程

创建子流程的simples用例使用 call() 功能。 call() 函数接受相关的二进制或可执行文件名和参数作为Python列表。在这个例子中,我们称之为Linux ls 命令 -l -a 参数。

subprocess.call(['ls','-l','-a'])
Start with call Function
从调用函数开始

为进程创建自己的Shell

在创建新进程时,新创建的进程将使用当前的pythonshell和相关变量。我们可以指定 shell=True 就像下面一样。

subprocess.call(['ls','-l','-a'],shell=True)
Create Own Shell For Process
为进程创建自己的Shell

保存进程输出(stdout)

在运行给定的命令或二进制文件之后,可能会创建一些输出。默认情况下,这个输出被打印到stdout,对于我们的示例,stdout是Python shell。我们可以通过调用 check_output 命令如下。在本例中,我们将保存。

output=subprocess.check_output(['ls','-l','-a'])
Save Process Output (stdout) 
保存进程输出(stdout)

我们可以看到,所有创建的输出都保存到名为 output . 当我们尝试将这个变量内容打印到终端时,我们将看到确切的run命令输出,即包含用户、所有者和访问时间信息的文件列表。

将输出转换为字符串而不是字节数组

在前面的示例中,我们已经看到输出不是格式化状态,因为输出以字节数组的形式保存到 output 变量。我们将使用 universal_newlines 选项为true for check_output() 功能。

output=subprocess.check_output(['ls','-l','-a'],universal_newlines=True)
Convert Output To A String Instead of Byte Array
将输出转换为字符串而不是字节数组

从进程获取数据

我们可以通过打开进程来与进程通信 Popen() 功能。我们将创建的流程实例设置为一个变量,然后使用 communicate() 读取工艺管道的函数。在这个例子中,我们将 hello poftut echo 命令插入管道,然后用 communicate()

p = subprocess.Popen(["echo", "hello poftut"], stdout=subprocess.PIPE)print(p.communicate())
Get Data From Process
从进程获取数据

如果启动的进程有错误,则引发异常

在使用 call() 函数我们可能会得到一些与提供的命令相关的错误。错误将像Python的常规输出一样打印到屏幕上。

Throw Exception If Run Command Has Error
运行命令出错时引发异常

这可能会被误解为命令成功完成且没有错误,因此输出会打印到屏幕上。如果我们想创建一些关于命令错误的监视程序,我们可以使用 check 选项,该选项将在命令出错时引发异常。

subprocess.call(["ls","foo bar"],check=True)
Throw Exception If Run Command Has Error
运行命令出错时引发异常

相关文章: 如何在Windows10上下载并安装LinuxBashShell?

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享