2017-01-23 29 views
0

我有幾個命令行界面命令可以使用Windows命令提示符執行。我用來檢索的命令很少文件從CVS庫使用命令提示符。現在我想通過一個python腳本來執行這些命令。我發現我必須使用子進程來通過python腳本與命令提示符進行交互。我試圖運行下面這段代碼通過HEAD從CVS存儲庫中檢索文件。當我試圖直接從命令提示符執行這些命令時,它們會正確執行。我可以看到它創建了一個本地工作區並正確檢索文件。但是當我執行python腳本,它不會執行任何操作。我需要您的幫助。我也希望通過標記來檢索文件。根據用戶指定的輸入從python腳本執行windows命令行從CVS存儲庫檢索文件

import os 
import sys 
import subprocess 

Current_Working_Directory=os.getcwd() 
print "Current_Working_Directory",Current_Working_Directory 

cmd = ['cvs', 
    '-d:::pserver:<username>@<computername>:<repository> 
    'login'] 
p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE) 
output=p.communicate() 
print "p",p 
cmd1=['set','CVSROOT','=','pserver:<username>@<computername>:<repository>'] 
p1 = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE) 
print p1 
cmd2=['cvs','co','-r','HEAD','Test'] 
p2 = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE) 
print p2 

回答

0

運行subprocess.Popen創建一個新的子過程。環境變量CVSROOT只存在於該子進程的簡短存在中,所以它不會存在於執行cvs命令的下一個Popen中。您想改爲使用os.environ["CVSROOT"] = 'pserver:<username>@<computername>:<repository>'

事實上,如果你在cvs login之前這樣做了,你不需要在該命令中明確地指定它。

另一種方法是在cvs co命令中指定帶有-d的cvsroot,就像您對cvs login命令所做的那樣。

+0

其實如果我嘗試運行上面的code.It不從CVS存儲庫中檢索文件,而如果它嘗試在命令提示符下運行這些命令,文件被正確提取,我可以在我的本地工作區中看到這些文件。我如何使用python腳本檢索文件? – user1681102

+0

你做了什麼來調試這個問題? CVS提供了什麼輸出? – Mort

+0

我現在改變了我的方法。而不是直接使用python腳本來執行命令行界面。我創建了一個批處理文件,它具有從CVS存儲庫中檢索文件的所有命令,並且我正試圖從我的python腳本中調用這個bat文件。爲我工作! – user1681102

相關問題