2013-06-25 155 views
0

我想運行一個使用python腳本的cmd exe文件。從Python運行子進程

我有以下代碼:

def run_command(command): 
    p = subprocess.Popen(command, shell=True, 
      stdout=subprocess.PIPE, 
      stderr=subprocess.STDOUT) 
    return p.communicate() 

然後我使用: run_command(R 「C:\用戶\用戶\桌面\應用\ uploader.exe」) 這將返回選項菜單,其中i需要指定cmd exe運行的附加參數。所以我傳遞其他參數爲cmd exe運行。 我如何做到這一點。我看了subprocess.communicate但我無法理解它

+0

有時您可以添加'stdin = subprocess.PIPE',然後編寫程序期望的通信方式,如'p.communicate(「程序需要什麼」)'。如果你真的需要互動的東西,你有麻煩。在unix-y系統上它是一件非常簡單的事情 - 只需使用pexpect來驅動交互式提示。但我不知道windows中的任何罐裝解決方案。您可以使用win32併爲該進程創建一個控制檯窗口,但很難弄清楚並且正確。 – tdelaney

回答

0

如果uploader.exe接受命令行選項,那麼你可以嘗試subprocess.call以下方式:

如果你的命令uploader.exe,上傳的目錄爲C:\Users\...\application,並且附加參數是x,你可以嘗試

import subprocess 
def run_command(command, directory, arg): 
    return subprocess.call(["command %s"%arg], cwd=directory, shell=True) 

run_command("uploader.exe", "C:\\Users\\..\\application", "x") 

然而,這是假定你不必實際上indexer.exe後您Popen互動吧。

+0

如果upload.exe可以使用命令行參數完成其任務,這是一個很好的答案。 – tdelaney

+0

我如何使控制檯窗口保持打開狀態?運行「run_command」後 – Rohit