使用subprocess的Popen函数执行系统命令
参考:
http://blog.sina.com.cn/s/blog_8f01450601017dlr.html
http://blog.csdn.net/wuwangyingzhong/article/details/6002055
http://www.360doc.com/content/14/0618/15/18227261_387777503.shtml
1、执行shell命令:
Popen函数指定shell=True即可,linux下参数executable将指定程序使用的shell,windows下无须指定。
示例1:在windows下执行cd命令获取当前目录
p2 = Popen('cd',shell=True)
2、执行其他程序
3、指定子进程工作路径:
示例1:
使新建的子进程工作指定的工作目录之下:
import sys,os,subprocess,commands
from subprocess import Popen,PIPE
p2 = Popen('cd',shell=True,stdout=PIPE,cwd='E:\svnworking')
p2.wait()
print "当前目录:%s" %p2.stdout.read()
上述命令使用了cwd,该参数指定了子进程工作目录。这个参数很有用,有时涉及到相对路径的时候必须如果不指定cwd,则程序可能出错。
示例2:
a.py:
p2 = Popen('python c:\b.py',shell=True,stdout=PIPE) #在a.py运行脚本b.py
p2.wait()
print "当前目录:%s" %p2.stdout.read()
b.py
f=open('test.txt','a') #注意这里使用了相对路径
f.close()
当a.py和b.py不在同一个目录的时候,运行a.py肯定报错(找不到指定的文件test.txt)。
原因:因为p2 = Popen('python c:\b.py',shell=True,stdout=PIPE') 创建的子进程与a.py在同一目录下工作,而该目录没有test.py。
解决方法:指定cwd参数。
4、获取Popen的返回值及输出
示例:
# -*- coding: cp936 -*-
#执行另外一个脚本
import sys,os,subprocess,commands
from subprocess import Popen,PIPE
p = Popen('python ' + path + '\getCurPath.py', stdout=PIPE, stderr=PIPE)
p.wait()
if(p.returncode == 0):
print "stdout:%s" %p.stdout.read()