Python執行系統命令:使用subprocess的Popen函數


使用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命令獲取當前目錄
   
   
   
           
  1. p2 = Popen('cd',shell=True)

2、執行其他程序


3、指定子進程工作路徑:
示例1:
使新建的子進程工作指定的工作目錄之下:
   
   
   
           
  1. import sys,os,subprocess,commands
  2. from subprocess import Popen,PIPE
  3. p2 = Popen('cd',shell=True,stdout=PIPE,cwd='E:\svnworking')
  4. p2.wait()
  5. print "當前目錄:%s" %p2.stdout.read()
上述命令使用了cwd,該參數指定了子進程工作目錄。這個參數很有用,有時涉及到相對路徑的時候必須如果不指定cwd,則程序可能出錯。

示例2:
a.py:
    
    
    
            
  1. p2 = Popen('python c:\b.py',shell=True,stdout=PIPE) #在a.py運行腳本b.py
  2. p2.wait()
  3. print "當前目錄:%s" %p2.stdout.read()

b.py
   
   
   
           
  1. f=open('test.txt','a') #注意這里使用了相對路徑
  2. 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的返回值及輸出
示例:
   
   
   
           
  1. # -*- coding: cp936 -*-
  2. #執行另外一個腳本
  3. import sys,os,subprocess,commands
  4. from subprocess import Popen,PIPE
  5. p = Popen('python ' + path + '\getCurPath.py', stdout=PIPE, stderr=PIPE)
  6. p.wait()
  7. if(p.returncode == 0):
  8. print "stdout:%s" %p.stdout.read()










免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM