使用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()