2013-05-20 159 views
0

我有這個代碼,我需要運行一個子進程,並在命令窗口中輸出whats的輸出。子進程無法正常工作

import subprocess 

msprompt = 'C:\Windows\Microsoft.NET\Framework64\\v4.0.30319\\MSBuild.exe' 
path = "C:/Users/bgb/Documents/Brent/Code/Visual Studio/tree.DataManagement.UnitTests./tree.DataManagement.UnitTests.vbproj" 

def command(msprompt, openFile): 

    for line in finalPathList: 


     p = subprocess.Popen([msprompt, path], shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 
     for line in p.stdout.readlines(): 
      print line, 
     retval = p.wait() 

當我在編譯器中運行這個它不工作,就吐出了這條消息:

MSBUILD : error MSB1009: Project file does not exist. 
Switch: "C:/Users/bgb/Documents/Brent/Code/Visual Studio/tree.FormControls.UnitTests./tree.FormControls.UnitTests.vbproj" 

但是,如果我完全打開命令窗口單獨的,我複製過來粘貼msprompt然後我複製path並將其粘貼到命令窗口中,並按回車,它完美的作品,有沒有人知道我在我的command功能搞亂?

非常感謝幫助!

+0

嗯,這裏有一些東西讓我覺得這實際上不是你的代碼('openFile','finalPathList' ...),但是我首先嚐試標準化你的路徑結構。你在Windows上,所以你應該在路徑文字中使用反斜槓,如果你沒有在'os'庫中傳遞任何東西,並且一直逃脫它們。 –

+0

最好使用原始字符串r'string \ with \ backspace',因爲您不必轉義路徑分隔符。 –

+0

@ThomasFenzl或者那個。儘管我發現在更大的程序中使用原始字符串可能會引起混淆,因爲您幾乎總是不得不同時處理兩者。 –

回答

1

我認爲你的路徑格式不正確,應該用兩個反斜槓\\而不是正斜槓/

出於調試目的,請嘗試使用os.path.exists(path),首先確保路徑正確。然後,您可以使用os.path.join修復您的路徑(文檔號here)。

+0

Isn '/斜槓\反斜槓? –

+0

@enginefree它被稱爲反斜槓。正斜槓是另一個(/)。 – khattam

+0

改變斜槓的方向並不重要,它仍然無法正常工作,而且當我直接在命令行提示符下嘗試時,無論斜槓是什麼方向,它都能正常工作,所以Idk ... :( – bbesase