Python脚本执行过程中,如需要运行另一个程序,或执行相关命令时,一般有几种方法:
1. os.system(command)
在子终端中执行系统命令command, 在命令执行完后退出并返回执行状态。无法捕捉命令执行过程返回的具体信息
2. os.popen(command, type)
打开一个与command进程之间的管道,并返回命令执行后的信息对象,并通过type指定管道流的方向,来读或写命令的执行结果
说明:os.system 与 os.popen 均能执行系统命令,二者之间的区别在于返回信息
system只能返回执行后的状态信息,popen则可以通过对象访问获取执行结果,例如:
>>> import os>>> p = os.system('ls')>>> p0>>> p = os.popen('ls').readlines()>>> pOut[10]:['test.c\n','conf.ini\n',....
3. subprocess.popen
subprocess模块可以创建新的进程,通过与新建进程的相关管道(输入、输出等)连通,可获取命令执行的返回 状态,
其意在取代现有的os.system os.popen等函数, 主要提供一个类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)
Popen类中有Popen.stdin, Popen.stdout, Popen.stderr三个相关属性分别表示子程序的标准输入、输出、错误,可通过属性实现与子进程通信
eg: subprocess.Popen(command, shell=True, stdin=subprocess.PIPE)
4. win32api模块
Python本身是没有自带访问windows系统API库的,需自己下载名为pywin32的库文件并安装后,
1. ShellExecute
导入win32api模块后,运用ShellExecute()函数来运行其他程序
eg:import win32api
ShellExecute(hwnd, ip, file, params, dir, bShow)
2. CreateProcess
为了便于控制通过脚本运行的程序,可通过使用CreateProcess()函数运行
CreateProcess(appName, commandLine , processAttributes , threadAttributes , bInheritHandles ,dwCreationFlags , newEnvironment , currentDirectory , startupinfo )