2011-04-03 65 views
2

我正在嘗試構建一個非常簡單的python腳本來自動縮小/合併一些css/js資源。從Python執行.jar

我不知道如何正確處理縮小步驟。我使用yui-compressor,通常直接從命令行調用jar。

假設構建腳本是在同一目錄犀牛js.jaryui-compressor.jar,我能壓縮的CSS/JS文件,像這樣:

java -cp js.jar -jar yuicompressor-2.4.4.jar -o css/foo.min.css css/foo.css 

呼喚從終端工作正常,但在Python構建文件,它不 例如,os.system("...") 返回退出狀態是0,並且沒有輸出被從命令返回(當使用例如,os.popen()代替os.system()

我猜它與路徑有關,也許與java調用os.system()時沒有正確解析...有什麼想法?

感謝所有幫助

+0

在問題中包含您的Python代碼。 – 2011-04-03 21:00:51

+0

這是上面使用os.system調用的確切命令: 'os.system(「java -cp js.jar -jar yuicompressor-2.4.4.jar -o css/foo.min.css css/foo.css」 )' 腳本和罐子都住在同一個目錄下,並從那個目錄中調用 – magoo 2011-04-03 21:46:24

回答

3

我有幾分相似的情況下,當我想要一個Python程序來建立一些命令,然後運行它們,與輸出去誰發射了腳本的用戶。我使用的代碼是:

import subprocess 
def run(cmd): 
    call = ["/bin/bash", "-c", cmd] 
    ret = subprocess.call(call, stdout=None, stderr=None) 
    if ret > 0: 
     print "Warning - result was %d" % ret 

run("javac foo.java") 
run("javac bar.java") 

在我的情況,我希望所有的命令來運行錯誤或沒有,這就是爲什麼我沒有對錯誤產生的異常。另外,我希望將任何消息直接打印到終端,所以我將stdout和stderr設置爲None,導致它們無法訪問我的python程序。如果您的需求對於錯誤和消息稍有不同,請參閱http://docs.python.org/library/subprocess.html文檔以瞭解如何調整發生的情況。

(我問慶典爲我跑我的命令,讓我得到我一貫的路徑,報價等)

0

使用os.system應該返回0,當命令正確執行。 0是成功的標準返回碼。

從命令行運行時是否打印輸出?

0

你爲什麼要在Python中做到這一點?對於這樣的任務,尤其是Java,最好使用Apache Ant。用xml編寫命令,然後運行ant。

+0

我認爲關鍵是你已經有了一些Java中的代碼,你需要將它與你正在編寫的Python腳本集成。一般來說,你可以用Python編寫Java中的任何東西,但這並不實用。 – user411279 2013-02-22 21:07:15