subprocess模块

简介: subprocess模块

当我们需要调用系统的命令的时候,最先考虑的os模块。用os.system()和os.popen()来进行操作。但是这两个命令过于简单,不能完成一些复杂的操作,如给运行的命令提供输入或者读取命令的输出,判断该命令的运行状态,管理多个命令的并行等等。这时subprocess中的Popen命令就能有效的完成我们需要的操作。subprocess模块允许一个进程创建一个新的子进程,通过管道连接到子进程的stdin/stdout/stderr,获取子进程的返回值等操作。

该模块是一个Popen类

subprocess.PIPE在创建Popen对象时,subprocess.PIPE可以初始化stdin, stdout或stderr参数。表示与子进程通信的标准流。

subprocess.STDOUT创建Popen对象时,用于初始化stderr参数,表示将错误通过标准输出流输出。

Popen的方法

Popen.poll() 

用于检查子进程是否已经结束。设置并返回returncode属性。

Popen.wait() 

等待子进程结束。设置并返回returncode属性。

Popen.communicate(input=None)

与子进程进行交互。向stdin发送数据,或从stdout和stderr中读取数据。可选参数input指定发送到子进程的参数。 Communicate()返回一个元组:(stdoutdata, stderrdata)。注意:如果希望通过进程的stdin向其发送数据,在创建Popen对象的时候,参数stdin必须被设置为PIPE。同样,如 果希望从stdout和stderr获取数据,必须将stdout和stderr设置为PIPE。

Popen.send_signal(signal) 

向子进程发送信号。

Popen.terminate()

停止(stop)子进程。在windows平台下,该方法将调用Windows API TerminateProcess()来结束子进程。

Popen.kill()

杀死子进程。

Popen.stdin 

如果在创建Popen对象是,参数stdin被设置为PIPE,Popen.stdin将返回一个文件对象用于策子进程发送指令。否则返回None。

Popen.stdout 

如果在创建Popen对象是,参数stdout被设置为PIPE,Popen.stdout将返回一个文件对象用于策子进程发送指令。否则返回 None。

Popen.stderr 

如果在创建Popen对象是,参数stdout被设置为PIPE,Popen.stdout将返回一个文件对象用于策子进程发送指令。否则返回 None。

Popen.pid 

获取子进程的进程ID。

Popen.returncode 

获取进程的返回值。如果进程还没有结束,返回None。

supprocess模块的工具函数

supprocess模块提供了一些函数,方便我们用于创建进程来实现一些简单的功能。

subprocess.call(*popenargs, **kwargs)

运行命令。该函数将一直等待到子进程运行结束,并返回进程的returncode。如果子进程不需要进行交 互,就可以使用该函数来创建。

subprocess.check_call(*popenargs, **kwargs)

与subprocess.call(*popenargs, **kwargs)功能一样,只是如果子进程返回的returncode不为0的话,将触发CalledProcessError异常。在异常对象中,包 括进程的returncode信息。

check_output(*popenargs, **kwargs)

与call()方法类似,以byte string的方式返回子进程的输出,如果子进程的返回值不是0,它抛出CalledProcessError异常,这个异常中的returncode包含返回码,output属性包含已有的输出。

getstatusoutput(cmd)/getoutput(cmd)

这两个函数仅仅在Unix下可用,它们在shell中执行指定的命令cmd,前者返回(status, output),后者返回output。其中,这里的output包括子进程的stdout和stderr。


相关文章
|
4月前
|
Shell Python
python中的subprocess.Popen | 9
python中的subprocess.Popen | 9
|
5月前
|
Unix Linux API
Python multiprocessing模块
Python multiprocessing模块
|
6月前
|
Go C# Python
Python 的 shutil 模块
`shutil`是Python标准库中的模块,提供高级文件和目录操作,如复制、移动、重命名、删除以及创建和删除目录。它扩展了`os`模块的功能,支持递归操作,例如`shutil.copytree()`用于递归复制目录,`shutil.rmtree()`用于递归删除目录。`shutil.move()`不仅移动文件,还可用于重命名。`shutil.remove()`和`shutil.rmtree()`分别用于删除文件和目录。这个模块对于文件管理任务非常实用。
100 5
|
6月前
|
Ubuntu 编译器 Python
【Python】已解决:安装python-Levenshtein包时遇到的subprocess-exited-with-error问题
【Python】已解决:安装python-Levenshtein包时遇到的subprocess-exited-with-error问题
295 1
|
8月前
|
开发者 Python
Python的sys模块详解
Python的sys模块详解
190 0
|
8月前
|
开发者 Python
python模块之sys
`sys`模块提供了许多与Python解释器和运行环境相关的功能,使得开发者可以更好地控制和管理Python程序的执行。
53 0
|
存储 Python
Python教程:sys.stdout方法
Python教程:sys.stdout方法
124 0
|
缓存 Unix Shell
Python模块学习:subprocess模块详解
Python模块学习:subprocess模块详解
89 0
|
存储 Python
Python3 pickle模块的使用详解
Python3 pickle模块的使用详解
|
Python
Python3,2行代码就输出日志文件,从此跟logging模块说拜拜~ ~【赶紧收藏】(二)
Python3,2行代码就输出日志文件,从此跟logging模块说拜拜~ ~【赶紧收藏】(二)
39222 1
Python3,2行代码就输出日志文件,从此跟logging模块说拜拜~ ~【赶紧收藏】(二)