2016-08-25 50 views
0

我創建了一個Python腳本它需要推出基於某些條件.BAT文件啓動存儲從Python腳本不同的目錄中的批處理文件。在另一個目錄

Python腳本位置:\分量\ myScript.py

批處理文件位置:\分量\ MS20160825 \ toExecute.bat
批處理文件在內部使用某些可執行文件這是在\組件\ BIN \

我怎麼如下:

    0從Python腳本
  1. 啓動.BAT文件,使英美菸草公司成功執行。 BAT文件應該能夠在\ Component \ bin \目錄中查找可執行文件以執行其任務併產生期望的結果。

  2. 保持Python腳本執行,直到完成.BAT其執行。

  3. .BAT文件有暫停> nul聲明。我需要繞過它,這意味着當.BAT從Python腳本執行它不應該等待用戶按下回車應該執行倒數第二個語句後正常終止。因爲需要多次執行相同的.BAT文件。

+0

與像'NoPause'的參數運行從Python腳本在批處理文件,並在批處理文件'如果/ I不是「%〜1」 ==「NOPAUSE」暫停> nul'使用。在命令提示符窗口'call /?'中運行以獲得有關如何使用批處理文件參數的幫助。 '%0'引用參數0,這是批處理文件本身。例如'%〜dp0'是驅動器和批處理文件路徑以反斜槓結尾的路徑。從批處理文件中引用其他文件夾/文件以及相對於批處理文件路徑的路徑可能很有用。 – Mofi

+0

關於相對路徑:以'\ Component \ myScript.py'等反斜槓開始的路徑與當前驅動器__root相關。以「..」開頭的路徑引用當前目錄的父目錄。並且以''。''開頭的路徑或文件夾或文件名稱相對於當前目錄。 – Mofi

+0

是的,這是一個打字錯誤。感謝Mofi指出了它。 –

回答

1

應該解決您遇到的所有問題!

import subprocess 

p = subprocess.Popen('batch.bat', shell=True, stdin=subprocess.PIPE) 
stdout, stderr = p.communicate() 
+0

感謝您的解決方案。它的工作,但需要一個小的更正。 即 –

0

感謝大家的積極建議。
有了小幅盤整下面的代碼爲我工作:

import subprocess 

batchFileLocation = 'Component\\MS20160825' 
batchFileFullPath = os.path.join(batchFileLocation, 'toExecute.bat') 

p = subprocess.Popen(os.path.abspath(batchFileFullPath), stdin=subprocess.PIPE, cwd = batchFileLocation) 
stdout,stderr = p.communicate() 

這裏CWD說法是非常重要的,它需要與在批處理文件放在那麼只有批處理文件就可以了位置更新正確執行。

之後,只有批處理文件才能搜索執行所需的二進制文件(放置在其他目錄中,如Component \ bin \)。

相關問題