2012-05-31 4 views
2

The documents рекомендую использовать subprocess.call с shell=True, однако, когда я пытаюсь сделать что-то же просто, какКак использовать subprocess.call без оболочки = True

call(['convert']) 

Я получаю сообщение об ошибке:

Must specify a file system

Когда я запускаю ту же команду через cmd.exe, я получаю

C:\Users\Mark>convert 
Version: ImageMagick 6.7.3-6 2011-11-10 Q16 http://www.imagemagick.org 
... 

e tc., то есть он фактически работает.

Так что же call делать? Почему он ищет файл?

Нужен ли полный путь к .exe? Если это так, я бы предпочел не делать этого, так как я не знаю, где находятся все .exe.


Просто попробовал полный путь файла к программе (call(['C:/imagemagick/convert.exe'])) и что работает. Но вопрос все еще стоит ... как вы это делаете без полного пути? Просто выполнить его из рабочего каталога?

+1

Не эксперт в Windows, но можно догадаться, что это попытка «dir.exe» –

+0

@RSamuelKlatchko: такая же ошибка. Расширение файла обычно может быть опущено для .exes на окнах. – mpen

+0

Вы используете интерпретатор Python, установленный в Windows, а не интерпретатор Python внутри Cygwin или аналогичную среду, не так ли? – gotgenes

ответ

4

Я считаю, что dir - встроенная функция cmd.com, а не отдельная программа. Вам понадобится shell = True или программа, которая предоставляет аналогичную функциональность dir (например, программу ls.exe в unixtools).

ОБНОВЛЕНИЕ ДЛЯ EDIT: То, что вы имеете дело со звуками так же, как известная проблема/ошибка, описанной здесь: http://bugs.python.org/issue8557 и здесь python subprocess Popen environment PATH?

кажется поведение subprocess.call когда shell=False довольно странно, под win32. Кажется, как минимум вам нужно использовать convert.exe не convert, и вам нужно search PATH yourself.

+0

Ах! Хорошо. Тогда это был плохой пример. Я действительно хочу использовать ImageMagick 'convert', который является * actual * exe. Там же проблема. – mpen

+0

re: ваше обновление: эта ошибка звучит точно так же, как проблема, с которой я сталкиваюсь. Приятно видеть, что я снова погружаюсь в Python. Я получаю ошибку в библиотеке! Ха-ха! Благодарю. – mpen

2

Вопрос здесь лучше понять, пытаясь dir.exe в оболочке:

C:\Users\lvc>dir.exe 
Volume in drive C has no label. 
Volume Serial Number is 4B8C-511A 

Directory of C:\Users\lvc 

File Not Found 

Это означает, что dir не является исполняемым где-нибудь в вашем %PATH% - скорее, это команда, что оболочка знает, как это сделать не просматривая программу для нее. Это означает, что он никогда не будет по определению работать с shell=False.

+0

Интересно. Никогда раньше не пытался запускать его с помощью .exe. Если бы я редактировал переменные окружения для включения любого каталога.exe, это сработает? – mpen

+2

Нет ложки. – senderle

+0

@Mark вы обнаружите, что включение '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'может быть трудным, поскольку проблема не в том, что он уже не существует, когда оболочка делает магию, чтобы найти ее в любом случае. Проблема в том, что 'dir' не реализуется автономным' .exe' - там * нет * 'dir.exe' для включения. – lvc

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