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。


相关文章
|
3月前
|
数据采集 Java 数据安全/隐私保护
如何通过subprocess在数据采集中执行外部命令
本文介绍了如何利用Python的`subprocess`模块在现代网络爬虫开发中执行外部命令,结合代理IP、Cookie、User-Agent及多线程技术,构建一个高效的微博数据爬虫。通过`subprocess`模块,爬虫可以与外部工具(如PhantomJS)交互,解决复杂页面加载问题。文章详细阐述了代理IP的设置、请求头的配置、外部命令的执行以及多线程爬取的实现方法,展示了如何在高效、稳定的环境下运行爬虫程序。
57 15
如何通过subprocess在数据采集中执行外部命令
|
3月前
|
Shell Python
python中的subprocess.Popen | 9
python中的subprocess.Popen | 9
|
存储 缓存 搜索推荐
python subprocess模块处理shell命令详解
python subprocess模块处理shell命令详解
|
缓存 Unix Shell
Python模块学习:subprocess模块详解
Python模块学习:subprocess模块详解
86 0
|
移动开发 Go Python
python-re模块和subprocess模块
一、re模块 re中文为正则表达式,是字符串处理的常用工具,通常用来检索和替换符合某个模式的文本。 注:要搜索的模式和字符串都可以是unicode字符串(str)和8位字符串(bytes),但是不能将unicode字符串与字节模式匹配。
930 0
|
Shell Python 缓存