當我在控制檯中運行程序時,我得到了一些文本輸出。 當我在Popen(..)中運行相同的程序時,使用相同的參數,stdout和stderr都是空的。Python2:subprocess.Popen()有另一個輸出,因爲它直接在控制檯上運行
我嘗試了一切,我可以想像像shell = False和shell = True,設置stdout = subprocess.PIPE,做一個os.chdir()改變到這個程序的目錄,嘗試p.wait()和p .communicate(),將該命令設置爲列表和字符串,但沒有任何效果。
例如:
p = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
out, err = p.communicate()
- >出來,犯錯是空字符串,但如果我在控制檯運行此命令我得到真正的輸出。命令是使用完整路徑的,所以無論命令將在何處啓動。
我的問題是,有沒有程序檢測到他們沒有在真正的控制檯中運行的機制?如果是這樣,我該如何作弊。
或想念我什麼?
(在Win7 64位的Python 2.7.8。X32)
我在文檔中看到:「在shell = True的Windows上,COMSPEC環境變量指定了默認的shell。在Windows上指定shell = True時,您希望執行的命令被內置到shell中(例如dir或copy)。您不需要shell = True來運行批處理文件或基於控制檯的可執行文件。 – 2015-03-13 13:26:09
謝謝@glennjackman,所以我可以將殼變成False :) – 2015-03-13 13:43:34
不知道爲什麼,但是當我打開Windows服務'COM +系統應用程序'後,'out'被填滿。現在一切正常。即使關閉和禁用此服務後,重新啓動電腦後。 o.O – 2015-03-13 13:45:49