Python: использовать обратные кавычки в команде, переданной функции subprocess.Popen - PullRequest
1 голос
/ 27 марта 2012

Я пытаюсь выполнить из сценария python3 команды Unix, которые выглядят так:

mycommand `cmd_giving_a_path`/file

Поэтому я использую функцию subprocess.Popen.Но что бы я ни пытался, подпроцесс не оценивает команду между обратными кавычками.Вот что я попробовал:

>>> subprocess.Popen(['echo', 'toto'])
<subprocess.Popen object at 0x2a98df1c50>
>>> toto

Хорошо!

subprocess.Popen(['echo', 'toto', '`ls`'])
<subprocess.Popen object at 0x2a98df1d50>
>>> toto `ls`

Хорошо тоже!

>>> subprocess.Popen(['echo', 'toto', '`ls`'], shell=True)
<subprocess.Popen object at 0x2a98df1d90>

Я не понимаю этого: у меня нет выводасовсем.С помощью этой команды я ожидал, что появится оболочка и получу команду:

echo toto `ls`

Но, очевидно, я ошибаюсь!

Может ли кто-нибудь помочь с этим?

СпасибоВы!

PS: Для тех, кто может спросить: «Зачем вам это нужно?»Ответ таков: параметры команд читаются из входного файла, который может содержать синтаксис такого типа.

Ответы [ 3 ]

3 голосов
/ 27 марта 2012

Работает как положено:

subprocess.Popen('echo toto `ls`', shell=True)
3 голосов
/ 27 марта 2012

Из документации pydoc для подпроцесса: В UNIX с shell = True: если args - строка, она указывает командную строку для выполнения через оболочку. Если args является последовательностью, первый элемент задает командную строку, и любые дополнительные элементы будут рассматриваться как дополнительные аргументы оболочки .

Т.е., вы говорили подпроцессу выполнить следующую команду:

bash -c 'echo' 'toto' '`ls`'

Как сказал Бессмертный, вы действительно хотите запустить:

bash -c 'echo toto `ls`'

, который вы можете сделать с любым из:

subprocess.Popen('echo toto `ls`', shell=True)
subprocess.Popen(['echo toto `ls`'], shell=True)
0 голосов
/ 27 марта 2012

Я не знаком с тем, как вы собираетесь это сделать, но не могли бы вы использовать ткань?

Ссылка: http://docs.fabfile.org/en/1.4.0/index.html

Я думаю, было бы просто написать функцию, которая читаетиз файла и выполняет эти команды, используя ткань.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...