python利用管道popen调用.exe进行交互
来源:互联网 发布:ubuntu iso 编辑:程序博客网 时间:2024/06/06 05:31
python是典型的胶水语言,可以来做粘合复杂程序的应用,在终端上可以随意地组合他和其它程序,作为一个中间处理模块。
python可以利用subprocess这个模块来产生子进程,并连接到子进程的标准输入/输出/错误中去,还可以得到子进程的返回值。
如下
p = subprocess.Popen(r'XX.exe',stdin = None,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)return_code = p.wait() list = p.stdout.read().splitlines()for i in range(len(list)): item = list[i]
注意:第一个参数字符串在windows下要加r,表示不转义,以防有路径时'\'被转义
PIPE管道是在类Unix操作系统(以及一些扩展,Windows)中,管道(英语:Pipeline)是原始的软件管道:即是一个由标准输入输出链接起来的进程集合,所以每一个进程的输出(stdout)被直接作为下一个进程的输入(stdin)。
主要用到了subprocess.Popen函数:
class subprocess.Popen( args,
bufsize=0,
executable=None,
stdin=None,
stdout=None,
stderr=None,
preexec_fn=None,
close_fds=False,
shell=False,
cwd=None,
env=None,
universal_newlines=False,
startupinfo=None,
creationflags=0)
args参数:
可以是一个字符串,可以是一个包含程序参数的列表。要执行的程序一般就是这个列表的第一项,或者是字符串本身。
如:subprocess.Popen(["cat","test.txt"])
bufsize参数:
如果指定了bufsize参数作用就和内建函数open()一样:0表示不缓冲,1表示行缓冲,其他正数表示近似的缓冲区字节数,负数表示使用系统默认值。默认是0。
executable参数:
指定要执行的程序。它很少会被用到:一般程序可以由args 参数指定。如果shell=True ,executable 可以用于指定用哪个shell来执行(比如bash、csh、zsh等)。*nix下,默认是 /bin/sh ,windows下,就是环境变量 COMSPEC 的值。windows下,只有当你要执行的命令确实是shell内建命令(比如dir ,copy 等)时,你才需要指定shell=True
,而当你要执行一个基于命令行的批处理脚本的时候,不需要指定此项。
stdin stdout和stderr:
stdin stdout和stderr,分别表示子程序的标准输入、标准输出和标准错误。可选的值有PIPE或者一个有效的文件描述符(其实是个正整数)或者一个文件对象,还有None。如果是PIPE,则表示需要创建一个新的管道,如果是None,不会做任何重定向工作,子进程的文件描述符会继承父进程的。另外,stderr的值还可以是STDOUT,表示子进程的标准错误也输出到标准输出。
preexec_fn参数:
如果把preexec_fn设置为一个可调用的对象(比如函数),就会在子进程被执行前被调用。(仅限*nix)
close_fds参数:
如果把close_fds设置成True,*nix下会在开子进程前把除了0、1、2以外的文件描述符都先关闭。在 Windows下也不会继承其他文件描述符。
shell参数:
如果把shell设置成True,指定的命令会在shell里解释执行。
cwd参数:
如果cwd不是None,则会把cwd做为子程序的当前目录。注意,并不会把该目录做为可执行文件的搜索目录,所以不要把程序文件所在目录设置为cwd 。
env参数:
如果env不是None,则子程序的环境变量由env的值来设置,而不是默认那样继承父进程的环境变量。注意,即使你只在env里定义了某一个环境变量的值,也会阻止子程序得到其他的父进程的环境变量(也就是说,如果env里只有1项,那么子进程的环境变量就只有1个了)。
注意在windows下,api函数CreateProcess接受的是一个字符串。即使是列表形式的参数,也需要先合并成字符串再传递给api函数。
则 subprocess.Popen("XX.exe" shell=True)
相当于 subprocess.Popen(”cmd.exe /C “+“XX.exe” shell=True)
一定要注意路径问题
- python利用管道popen调用.exe进行交互
- Python subprocess.Popen子进程管道阻塞
- Python的subprocess子进程和管道进行交互
- Python的subprocess子进程和管道进行交互
- Python的subprocess子进程和管道进行交互
- Python的subprocess子进程和管道进行交互
- Python的subprocess子进程和管道进行交互
- 管道-popen
- 管道popen
- popen管道
- 管道popen
- 利用管道进行通信
- 利用管道进行通信
- Python Subprocess Popen 管道阻塞问题分析解决
- python 使用 subprocess.Popen() 调用子进程
- Python中调用Popen指定英文环境
- Python 3 利用 subprocess 实现管道( pipe )交互操作读/写通信
- VC利用管道读取EXE返回值
- 关于C语言程序
- 1.编写一个简单的C语言程序:计算输入多个整数的平均值,并将此程序分割成多个小文件。 2.为第1题中的程序编写makefile文件,用make编译后改成返回最小值,再编译,观察有多少文件不需要重新
- 1.编写一个简单的C语言程序:根据输入的两个整数求平均值并且在终端输出,通过gcc编译器得到它的汇编程序文件。 2.编写一个C语言程序:打印输出所有“水仙花数”,用gdb调试程序(给出步骤)。所谓“
- 数据结构c++实现----链式栈
- MyEclipse高效开发之必备快捷键技能
- python利用管道popen调用.exe进行交互
- C++STL程序:全排列,删除、插入元素。
- POJ 2031 BUilding a Space Station 两点间距离 + 最小生成树
- 百度谷歌等各大网站收录网页提交入口
- 应聘时最漂亮的回答!
- 约瑟夫环(丢手帕游戏)Java 链表实现(程序正确无误)
- [设计模式笔记]三. 行为型模式--15.Chain Of Responsibility(职责链模式)(一)
- arm与thumb
- 发布文章时多少天、多少小时、多少分前发布功能