2012-11-24 109 views
4

我試圖從Python程序執行Java程序:如何執行外部程序

subprocess.Popen(["java -mx256m -jar /sphinx4-1.0beta5/bin/HelloWorld.jar"], shell=True) 

但它失敗,此錯誤:

Error: Unable to access jarfile /sphinx4-1.0beta5/bin/HelloWorld.jar 

我需要在一個特定目錄:/home/karen/sphinx4-1.0beta-src,執行命令:"java -mx256m -jar /sphinx4-1.0beta5/bin/HelloWorld.jar" 但我不知道如何做到這一點。我需要我的python程序執行它!

+0

爲什麼不直接在腳本中編寫文件的完整路徑? – alexvassel

+1

'-mx256m'應該是'-Xmx256m'。 –

+0

謝謝,@AndrewThompson你的評論非常有用! – karensantana

回答

6

使用CWD參數

subprocess.Popen(["java -mx256m -jar ../sphinx4-1.0beta5/bin/HelloWorld.jar"], cwd=r'path', shell=True) 

http://docs.python.org/2/library/subprocess.html 「如果CWD不是無,在執行之前,孩子的當前目錄將改爲CWD。請注意,此目錄不被認爲是搜索可執行文件時,這樣你不能指定相對於cwd的程序路徑。「

+0

嗯!發生了一些奇怪的事情!我得到這個錯誤:'OSError:[Errno 2]沒有這樣的文件或目錄:'home/karen/sphinx4-1.0beta5-src/sphinx4-1.0beta5 /' ' – karensantana

+0

我也必須指定命令的絕對路徑? – karensantana

+0

我修改了它的命令:'subprocess.Popen([「java -Xmx256m -jar bin/HelloWorld.jar」],cwd = r'/ home/karen/sphinx4-1.0beta5-src/sphinx4-1.0beta5 /' ,shell = True)' – karensantana

0

您的問題可能與您的jar文件路徑有關。你的代碼很可能在你的popen調用中調用/ home/Karen/sphynx4-1beta-src。這不是一個可以在不同系統上工作的解決方案,除非文件處於相同的絕對路徑。