2015-08-30 238 views
1

打開蝙蝠我有一個文件夾中.bat與名爲exeabcexport.exe用下面的代碼中:從蟒蛇

abcexport.exe myswf.swf 

雙擊蝙蝠通常在Windows上導出swf預期。

我需要從python內部做到這一點,但它抱怨abcexport是「不被識別爲內部或外部命令」。

我的代碼:

嘗試1 -

os.startfile("path\\decompiler.bat") 

嘗試2 -

subprocess.call([path\\decompiler.bat"]) 

也試圖與os.system()相同,並且與subprocess方法Popen,並傳遞參數shell=True端同上

+2

使用'殼= TRUE'是不必要的運行.BAT用'Popen'(和'呼叫「等)。底層的'CreateProcess'調用知道運行'ComSpec'環境變量中設置的shell。 – eryksun

+2

由於批處理文件依賴於工作目錄,因此需要使用'cwd'參數進行設置。也就是說,.bat寫得很糟糕。它應該將其目錄稱爲'%〜dp0',即腳本的[d] rive和[p] ath(arg 0)。 – eryksun

+2

當您通過雙擊運行批處理文件時,它將起作用,因爲資源管理器將工作目錄設置爲批處理文件的目錄。 – eryksun

回答

0

.bat文件不可執行。您必須使用cmd.exe(解釋器)「運行它」。嘗試

import subprocess 
executable="path\\decompiler.bat" 
p = subprocess.Popen(["C:\Windows\System32\cmd.exe", executable, 'myswf.swf'], shell=True, stdout = subprocess.PIPE) 
p.communicate() 

在蝙蝠的爲了工作

+0

'WindowsError:[Error 2] El sistema no puede encontrar el archivo especificado' - >找不到文件.. 同樣用'\\'',''''''''替換'\\' ,用'r'C:\ Windows \ System32 ...「',並用bot'os'和'subprocess'方法... – Nico

+0

我用更精確的例子更新了我的答案。 – 131

+1

此外,請確保abcdexport.exe位於PATH中,或使用dirname(abcdexport.exe)作爲工作目錄(用於popen參數) – 131

1

您可以使用此

from subprocess import Popen 
p = Popen("batch.bat", cwd=r"C:\Path\to\batchfolder") 
stdout, stderr = p.communicate() 
+1

也可以使用batch.bat的相對或絕對路徑,除非它位於PATH '或者在當前進程的工作目錄中。 – eryksun