Python中subprocess模块用法实例详解

本文实例讲述了Python中subprocess模块用法。分享给大家供大家参考。具体如下:

执行命令:

>>> subprocess.call(["ls", "-l"])
0
>>> subprocess.call("exit 1", shell=True)
1

测试调用系统中cmd命令,显示命令执行的结果:

x=subprocess.check_output(["echo", "Hello World!"],shell=True)
print(x)
"Hello World!"

测试在python中显示文件内容:

y=subprocess.check_output(["type", "app2.cpp"],shell=True)
print(y)
#include <iostream>
using namespace std;
......

查看ipconfig -all命令的输出,并将将输出保存到文件tmp.log中:

handle = open(r'd:\tmp.log','wt')
subprocess.Popen(['ipconfig','-all'], stdout=handle)

查看网络设置ipconfig -all,保存到变量中:

output = subprocess.Popen(['ipconfig','-all'], stdout=subprocess.PIPE,shell=True)
oc=output.communicate()#取出output中的字符串
#communicate() returns a tuple (stdoutdata, stderrdata).
print(oc[0]) #打印网络信息
Windows IP Configuration
    Host Name . . . . .

我们可以在Popen()建立子进程的时候改变标准输入、标准输出和标准错误,并可以利用subprocess.PIPE将多个子进程的输入和输出连接在一起,构成管道(pipe):

child1 = subprocess.Popen(["dir","/w"], stdout=subprocess.PIPE,shell=True)
child2 = subprocess.Popen(["wc"], stdin=child1.stdout,stdout=subprocess.PIPE,shell=True)
out = child2.communicate()
print(out)
 ('   9   24   298\n', None)

如果想频繁地和子线程通信,那么不能使用communicate();因为communicate通信一次之后即关闭了管道.这时可以试试下面的方法:

p= subprocess.Popen(["wc"], stdin=subprocess.PIPE,stdout=subprocess.PIPE,shell=True)
p.stdin.write('your command')
p.stdin.flush()
#......do something
try:
  #......do something
  p.stdout.readline()
  #......do something
except:
  print('IOError')
#......do something more
p.stdin.write('your other command')
p.stdin.flush()
#......do something more

希望本文所述对大家的Python程序设计有所帮助。

时间: 2015-05-19

Python中subprocess的简单使用示例

在c语言中,一个进程可以fork出一个子进程,并让这个子进程exec一个新的命令.在python中,我们通过标准库的subprocess包来fork一个子进程,并在子进程中运行一个新的程序. subprocess包中有数个创建子进程的函数,这些函数分别以不同的方式创建子进程,所以我们可以根据需要来从中选取一个使用.另外subprocess还提供了一些管理标准流(standard stream)和管道(pipe)的工具,从而在进程间使用文本通信. 使用subprocess包中的函数创建子进程的时候

python subprocess 杀掉全部派生的子进程方法

下面就是今天下午的研究成果. 发布系统需要响应用户的中断请求,需要在GET方法中杀掉由subprocess派生的子进程,刚开始直接用os.kill 发现子进程的子进程无法kill,谷歌了一些,发现kill可以干掉进程组,于是测试,但是默认情况下,subprocess派生的进程组和主程序,也就是我的web.py进程是在一个进程组里的,这要是kill了,那就调的了. 继续翻google,看subprocess的document时发现这个变量: subprocess.CREATE_NEW_PROCES

Python的subprocess模块总结

subprocess意在替代其他几个老的模块或者函数,比如:os.system os.spawn* os.popen* popen2.* commands.* subprocess最简单的用法就是调用shell命令了,另外也可以调用程序,并且可以通过stdout,stdin和stderr进行交互. subprocess的主类 复制代码 代码如下: subprocess.Popen(       args,       bufsize=0,       executable=None,      

Python标准库06之子进程 (subprocess包) 详解

这里的内容以Linux进程基础和Linux文本流为基础.subprocess包主要功能是执行外部的命令和程序.比如说,我需要使用wget下载文件.我在Python中调用wget程序.从这个意义上来说,subprocess的功能与shell类似. subprocess以及常用的封装函数 当我们运行python的时候,我们都是在创建并运行一个进程.正如我们在Linux进程基础中介绍的那样,一个进程可以fork一个子进程,并让这个子进程exec另外一个程序.在Python中,我们通过标准库中的subp

Python下的subprocess模块的入门指引

在熟悉了Qt的QProcess以后,再回头来看python的subprocess总算不觉得像以前那么恐怖了. 和QProcess一样,subprocess的目标是启动一个新的进程并与之进行通讯. subprocess.Popen 这个模块主要就提供一个类Popen: class subprocess.Popen( args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, clo

Python 创建子进程模块subprocess详解

最近,我们老大要我写一个守护者程序,对服务器进程进行守护.如果服务器不幸挂掉了,守护者能即时的重启应用程序.上网Google了一下,发现Python有很几个模块都可以创建进程.最终我选择使用subprocess模块,因为在Python手册中有这样一段话: This module intends to replace several other, older modules and functions, such as: os.system.os.spawn*.os.popen*.popen2.*

Python subprocess模块学习总结

一.subprocess以及常用的封装函数运行python的时候,我们都是在创建并运行一个进程.像Linux进程那样,一个进程可以fork一个子进程,并让这个子进程exec另外一个程序.在Python中,我们通过标准库中的subprocess包来fork一个子进程,并运行一个外部的程序.subprocess包中定义有数个创建子进程的函数,这些函数分别以不同的方式创建子进程,所以我们可以根据需要来从中选取一个使用.另外subprocess还提供了一些管理标准流(standard stream)和管

python进程类subprocess的一些操作方法例子

subprocess.Popen用来创建子进程. 1)Popen启动新的进程与父进程并行执行,默认父进程不等待新进程结束. 复制代码 代码如下: def TestPopen():   import subprocess   p=subprocess.Popen("dir",shell=True)   for i in range(250) :     print ("other things") 2)p.wait函数使得父进程等待新创建的进程运行结束,然后再继续父进

python中的subprocess.Popen()使用详解

从python2.4版本开始,可以用subprocess这个模块来产生子进程,并连接到子进程的标准输入/输出/错误中去,还可以得到子进程的返回值. subprocess意在替代其他几个老的模块或者函数,比如:os.system os.spawn* os.popen* popen2.* commands.* 一.subprocess.Popen subprocess模块定义了一个类: Popen class subprocess.Popen( args, bufsize=0, executable

python进程与线程小结实例分析

传统方式是调用2个方法执行1个任务,方法按顺序依次执行 # -*- coding:utf-8 -*- import threading import time def run(n): print('task',n) time.sleep(3) if __name__ == '__main__': run('t1') run('t2') 多线程例子 2个线程同时并发执行1个任务 # -*- coding:utf-8 -*- import threading import time def run(

Python对excel文档的操作方法详解

本文实例讲述了Python对excel文档的操作方法.分享给大家供大家参考,具体如下: pip安装python库:(linux命令行输入不要在idle输入) pip install xlrd pip install xlwd 1.获取excel中的数据 利用xlrd模块读取并简单操作excel文档: 1.打开excel文档 import xlrd workbook = xlrd.open_workbook("test_case.xlsx") 2.获取所有的sheet表 sheet_na

Python 实现数据结构-循环队列的操作方法

今天我们来到了循环队列这一节,之前的文章中,我介绍过了用python自带的列表来实现队列,这是最简单的实现方法. 但是,我们都知道,在列表中删除第一个元素和删除最后一个元素花费的时间代价是不一样的,删除列表的第一个元素,那么在它之后的所有元素都要进行移动.所以当列表特别长的时候,这个代价就比较明显了.我们本文介绍的循环队列可以避免这个问题,同样我们上篇文章提到的用链表实现的方法也可以避免. 下面,我们来介绍循环队列. 循坏队列 循环队列,就是将普通的队列首尾连接起来, 形成一个环状,并分别设置首

python之pexpect实现自动交互的例子

Pexpect 是 Expect 语言的一个 Python 实现,是一个用来启动子程序,并使用正则表达式对程序输出做出特定响应,以此实现与其自动交互的 Python 模块. Pexpect 的使用范围很广,可以用来实现与 ssh.ftp .telnet 等程序的自动交互:可以用来自动复制软件安装包并在不同机器自动安装:还可以用来实现软件测试中与命令行交互的自动化. 整体来说大致的流程包括: 运行程序 程序要求人的判断和输入 Expect 通过关键字匹配 根据关键字向程序发送符合的字符 基本使用流

在Python中os.fork()产生子进程的例子

例1 import os print 'Process (%s) start...' %os.getpid() pid = os.fork() if pid==0: print 'I am child (%s) and my father is %s.'%(os.getpid(),os.getppid()) else: print 'I (%s) just created a child process (%s).' %(os.getpid(),pid) 加载os模块后,首先os.fork()函

Python框架Flask的基本数据库操作方法分析

本文实例讲述了Python框架Flask的基本数据库操作方法.分享给大家供大家参考,具体如下: 数据库操作在web开发中扮演着一个很重要的角色,网站中很多重要的信息都需要保存到数据库中.如用户名.密码等等其他信息.Django框架是一个基于MVT思想的框架,也就是说他本身就已经封装了Model类,可以在文件中直接继承过来.但是在Flask中,并没有把Model类封装好,需要使用一个扩展包,Flask-SQLAlchemy.它是一个对数据库的抽象,让开发者不用这些编写SQL语句,而是使用其提供的接

python进程的状态、创建及使用方法详解

本文实例讲述了python进程的状态.创建及使用方法.分享给大家供大家参考,具体如下: 进程以及状态 1. 进程 程序:例如xxx.py这是程序,是一个静态的 进程:一个程序运行起来后,代码+用到的资源 称之为进程,它是操作系统分配资源的基本单元. 不仅可以通过线程完成多任务,进程也是可以的 2. 进程的状态 工作中,任务数往往大于cpu的核数,即一定有一些任务正在执行,而另外一些任务在等待cpu进行执行,因此导致了有了不同的状态 就绪态:运行的条件都已经慢去,正在等在cpu执行 执行态:cpu

python将音频进行变速的操作方法

有的时候需要手里的音频文件变速听,或可能变慢或可能变快 这里使用的python进行操作,我的目标是将文件转成2倍速 首先需要安装插件 pip install ffmpeg 然后再执行: from ffmpeg import audio audio.a_speed("D:\\1505.mp3", "2", "D:\\1505_2x.mp3") 如果执行不出错,会返回一个true 运行结果 我可以看到这里的音频速度提升以后音频小了 这里我是将目标路径