2013-04-22 2 views
3

У меня есть функция, которая работает lessc (устанавливается с npm install -g less):Windows, subprocess.Popen пакетный файл без оболочки = True

>>> 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

+0

@kragniz: 'lessc' - командный файл (который может быть проблемой), и такая же ошибка возникает, когда я запускаю его с полным путем. – Blender

+0

Является ли ошибка, вызванная самим модулем подпроцесса или пакетным скриптом? Вы можете добавить 'cwd = r'c: \ path \ to \ script \ '' аргумент для вызова Popen – JBernardo

ответ

0

Измените файл на lessc.bat или создайте файл .bat, который вызывает lessc. Таким образом, файл будет распознаваться Windows в виде пакетного файла и будет выполнен правильно.

Возможно, вам также потребуется установить cwd в дополнение к этому в зависимости от того, где находится файл .bat.

Смежные вопросы