2017-05-30 132 views
0

我有一個批處理文件,我用它來加載一些預編譯的二進制文件來控制我的設備。 它的命令是:使用Python運行.bat文件

cd build 
java -classpath .;..\Library\mfz-rxtx-2.2-20081207-win-x86\RXTXcomm.jar - 
Djava.library.path=..\Library\mfz-rxtx-2.2-20081207-win-x86 tabotSample/Good1 
pause 

現在,我想運行使用Python的批處理文件,我試圖os.system(batch,bat),我POPEN

import os from subprocess import Popen os.popen("cd TAbot") r=os.popen("hello.bat")

試着用然而,蟒蛇控制檯(蟒蛇python 2.7)似乎執行了代碼,但是什麼也沒有返回,也沒有任何反應。 我想從python運行這個批處理文件,請幫助我。順便說一句,我試圖popen另一批文件,如 echo Hello但沒有任何反應。

+0

原樣,'CD b一般來說,uild'不起作用。依賴於工作目錄來查找與腳本相關的資源是一個錯誤。使其相對於批處理文件本身的目錄,而不是依賴於工作目錄。例如,如果「build」目錄與批處理文件位於同一目錄中,則可以使用'cd/d「%〜dp0build」',其中批處理文件名是'%0'參數,我們正在[d] rive和base [p] ath作爲'%〜dp0'。 – eryksun

+0

它沒有工作,我不知道爲什麼每次我使用popen運行.bat文件沒有任何反應。 –

回答

0

我覺得這應該是這樣的:

batch.py​​

from subprocess import Popen 
p = Popen("test.bat", cwd=r"C:\path\to\batch\folder") 
stdout, stderr = p.communicate() 

test.bat的

echo Hello World! 
pause 
+0

我試過了,什麼都沒有出現 –

0

下面是簡單的解決方案。

from subprocess import Popen 
import subprocess 

def run_batch_file(file_path): 
    Popen(file_path,creationflags=subprocess.CREATE_NEW_CONSOLE) 

run_batch_file('file_name.bat') 

file_name.bat

echo .bat file running from python 
pause 
0

您也可以使用此

import subprocess 
subprocess.call(["C:\\temp\\test.bat"], shell=False) 

test.bat的

copy "C:\temp\test.txt" "C:\temp\test2.txt" 
+0

看來批處理文件正在工作,但是它需要選擇Y/N,我該如何輸入?或預先輸入此密鑰? –

+0

您可以將參數傳遞給subprocess.call([「C:\\ temp \\ test.bat」,「Y」] 或subprocess.call([「C:\\ temp \\ test.bat」,「 N「]。在bat文件中,您可以使用%0,%1,... [http://www.robvanderwoude.com/parameters.php](http://www.robvanderwoude.com /parameters.php) – Octo

+0

我試過了subprocess.call([「C:\\ temp \\ test.bat」,「Y」]但是,它沒有工作,對不起,我真的是新手。 –