Использование подпроцесса Python, а не os.system

Следуя совету Игнасио ( Python удалить пробелы и добавить ), я пытаясь преобразовать приведенную ниже команду для использования subprocess, а не os.system.

Сценарий: os.system("/usr/local/bin/growlnotify -n emesene -a emesene -t """+title+""" -m """+text+"""""")

Я бы подумал: subprocess.call(['/usr/local/bin/growlnotify', '-n emesene', '-a emesene', '-t ""+title+"""', '-m """+text+"""""'], shell=True)

Но это не работает. Любые идеи, как заставить это работать? Я просмотрел документы Python и посмотрел здесь, но не могу понять!

Кстати, title и text - это переменные из системы уведомлений мессенджеров emesene.


person Josh Fradley    schedule 10.06.2011    source источник
comment
подумайте о том, чтобы принять ответ Игнасио в связанном вопросе.   -  person Sven Marnach    schedule 10.06.2011


Ответы (2)


Вам не нужно «shell = True», когда вы используете список для передачи команды. Я бы просто так прокомментировал сообщение Джереми Бэнкса (поскольку его заявление о shlex.split наиболее примечательно), но в настоящее время у меня нет представителя, чтобы сделать это :/

subprocess.call(['/usr/local/bin/growlnotify', '-n',  'emesene', '-a', 'emesene', '-t', title, '-m', text])
person Prashant Kumar    schedule 10.06.2011

Вместо

subprocess.call(['/usr/local/bin/growlnotify', '-n emesene', '-a emesene', '-t ""+title+"""', '-m """+text+"""""'], shell=True)

использовать

subprocess.call(['/usr/local/bin/growlnotify', '-n',  'emesene', '-a', 'emesene', '-t', title, '-m', text], shell=True)

Везде, где у вас есть пробел без кавычек в команде оболочки, разделите другой элемент списка.

Функцию shlex.split можно использовать для преобразования из оболочки в стиле команда в список сортировки, которую ожидает подпроцесс.

person Jeremy    schedule 10.06.2011
comment
Не работает. Дает пустое уведомление, поэтому я предполагаю, что переменные не принимаются. - person Josh Fradley; 10.06.2011