Использование подпроцесса Python вместо os.system - PullRequest
1 голос
/ 10 июня 2011

Следуя совету Игнасио ( 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 messenger

Ответы [ 2 ]

5 голосов
/ 10 июня 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 можно использовать для преобразования из команды стиля оболочки в список ожидаемых подпроцессов.

4 голосов
/ 10 июня 2011

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

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