2011-05-03 74 views
2

我想從python腳本調用命令提示符(&將一些參數傳遞給命令提示符)。從python腳本調用命令提示時的問題

我使用pyqt4開發用戶界面和在用戶界面上我有一個運行按鈕。在選擇運行按鈕時,我想調用一個命令提示符並傳遞一些腳本名稱作爲參數。

self.connect(run_button, SIGNAL('clicked()'), self.runscript) # this is my run button signal and i'm calling the runscript() 

def runscript(self): 
    print 'Inside Run Script' 
    os.chdir('C:\PerfLocal_PAL') 
    try: 
     subprocess.call(['C:\windows\system32\cmd.exe']) 
    except: 
     print 'Exception Caused.' 

當我點擊運行按鈕時,應用程序死亡,它根本不會調用命令提示符。我嘗試使用os.system以及相同的結果。

另外,我想知道如何將參數傳遞給調用函數?

對此的任何幫助都非常感謝。

感謝,

回答

2

要正確定義在Python文件路徑在Windows上,你需要做的三兩件事之一:

  • 使用正斜槓:"C:/PerfLocal_PAL"(Python的理解正斜槓的不管是什麼平臺)
  • 使用原始字符串:r"C:\PerfLocal_PAL"
  • 逃離反斜槓:"C:\\PerfLocal_PAL"

這會影響你的chdir呼叫,您subprocess.call調用。

但是,由於您的父進程是GUI應用程序,因此您也將遇到問題,因此沒有用於控制檯流的stdin,stdoutstderr。嘗試使用替代以下獲得完全獨立的命令窗口:

subprocess.call("start", shell=True) 

你也可能要使用的start"/D"參數設置你的工作目錄,而不是改變父進程的CWD:

subprocess.call(["start", "/DC:\\PerfLocal_PAL"], shell=True) 
+0

感謝此部分代碼工作。 – user596922 2011-05-04 06:24:02

0

一個問題是,subprocess.call將阻塞,直到它完成,並CMD.EXE不會返回,直到你退出。這回答了「剛剛死亡」,但可能無法解釋控制檯永遠不會出現。從此開始:

subprocess.Popen(['C:\Windows\system32\cmd.exe']) 

至少不會阻止。如果你可以得到它,試試你的論點,像這樣:

subprocess.Popen(['C:\Windows\system32\cmd.exe', 'program_or_script', 'arg1']) 
0

你試過調試過嗎?腳本失敗了哪一行?它實際上是否啓動了runscript函數?

關於將參數傳遞給cmd.exe,請查看subprocess.call的文檔。它會告訴你可以有第二個參數給程序提供命令行參數,例如

subprocess.call(["C:\windows\system32\cmd.exe", "scriptname.bat"]) 
0

你的信號連接和你的子進程調用似乎很好。 更改CHDIR呼籲:

os.chdir(r'C:\PerfLocal_PAL') 

我猜你所得到的是錯誤的形式爲(當您從命令提示符啓動您的應用程序):

 
WindowsError: [Error 123] The filename, directory name, or volume label syntax is incorrect: 'C:\PerfLocal_PAL' 
相關問題