我已經安裝在我的MAC,我可以用在終端使用下面的命令來編譯HAML文件轉換爲HTML文件的紅寶石寶石「HAML」使用Ruby寶石/命令該命令僅在第二個路徑創建一個html文件,並且在終端中不提供輸出。因此,例如,此命令:蟒蛇
haml "/Volumes/Macintosh HD/Users/me/Sites/ICSP/sugar.haml" "/Volumes/Macintosh HD/Users/me/Sites/ICSP/sugar.html"
在給定路徑處創建一個sugar.html文件。現在我試圖從python腳本中使用這個功能。當我鍵入此爲IDLE的交互式Python外殼:
>>>import subprocess
>>>subprocess.Popen('haml "/Volumes/Macintosh HD/Users/me/Sites/ICSP/sugar.haml" "/Volumes/Macintosh HD/Users/me/Sites/ICSP/sugar.html"', shell=True, executable='/bin/bash')
<subprocess.Popen object at 0x159d6f0>
我得到的輸出表明進程已經運行,但沒有輸出文件。這是爲什麼發生?我甚至放入了Shell參數,但沒有出現交互式shell。另外,我在某處讀到,使用的默認shell不是bash,這是Mac終端使用的,所以我把它放在了太好的位置。
按照icktoofay的建議,我跑了check_call。這是我收到的回溯:
Traceback (most recent call last):
File "/Users/neil/Desktop/subprocesstest.py", line 7, in p = subprocess.check_call(x, shell=True) File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 504, in check_call raise CalledProcessError(retcode, cmd) CalledProcessError: Command 'haml "/Volumes/Macintosh HD/Users/neil/Sites/ICSP/sugar.haml" "/Volumes/Macintosh HD/Users/neil/Sites/ICSP/sugar.html"' returned non-zero exit status 127
按照bash reference manual,而尋找一個要執行的命令,
If the name is neither a shell function nor a builtin, and contains no slashes, Bash searches each element of $PATH for a directory containing an executable file by that name. ... If that function is not defined, the shell prints an error message and returns an exit status of 127.
但是,我認爲這將後殼確實找到HAML命令和可執行參數,因爲在此之前,它給出'文件或目錄未找到錯誤',這表明該函數不是直接可執行的,而是僅在一個shell中可執行。
現在我該如何讓python找到這個haml命令?或者,我會不得不使用一些醜陋的解決方法,像一個然後調用haml命令的applescript。
您是否嘗試過使用['subprocess.check_call'(http://docs.python.org/library/subprocess.html#subprocess.check_call),而不是直接使用['subprocess.Popen']( http://docs.python.org/library/subprocess.html#subprocess.Popen)? – icktoofay 2011-06-04 20:37:55
對不起,現在這個問題似乎很長時間了,但我試圖提供儘可能多的信息來使調試更容易。 – Neil 2011-06-04 20:59:10
你可能已經嘗試過這樣的事情,但是這個工作(路徑明顯改變了)? 'subprocess.check_call(['/ path/to/haml','/your/file.haml','/your/file.html'])' – icktoofay 2011-06-04 21:03:38