2013-04-22 51 views
3

我有一個運行lessc一個函數(npm install -g less安裝):的Windows subprocess.Popen無殼的批處理文件=真

>>> import subprocess 
>>> subprocess.Popen(['lessc']) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\Python27\lib\subprocess.py", line 679, in __init__ 
    errread, errwrite) 
    File "C:\Python27\lib\subprocess.py", line 896, in _execute_child 
    startupinfo) 
WindowsError: [Error 2] The system cannot find the file specified 

不幸的是,這是行不通的,除非我添加shell=True

>>> subprocess.Popen(['lessc'], shell=True) 
<subprocess.Popen object at 0x01F619D0> 

我能做些什麼來使lessc在不使用shell=True的情況下運行?

+0

你可以在不使用'shell = True'的情況下顯式調用二進制文件的完整路徑名嗎? – kragniz 2013-04-22 00:09:02

+0

@kragniz:'lessc'是一個批處理文件(實際上可能是問題),當我用完整路徑運行它時會發生相同的錯誤。 – Blender 2013-04-22 00:11:39

+0

是由子進程模塊自身還是由批處理腳本生成的錯誤?您可以在Popen上添加'cwd = r'c:\ path \ to \ script \'參數 – JBernardo 2013-04-22 00:21:59

回答

0

將文件更改爲lessc.bat或創建調用lessc的.bat文件。這樣該文件將被Windows識別爲批處理文件,並且將被正確執行。

根據.bat文件的位置,您可能還需要設置cwd。