Выполнение системной команды через python не дает такого же результата

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

subprocess.call(['sudo mail -s "Subject" [email protected] < /path/to/file.txt'], shell=True)

Это выполняется, но выдает сообщение mail: Null message body; hope that's ok, хотя в файле есть содержимое. И я получаю электронное письмо без тела (но с правильной темой).

Когда я запускаю команду напрямую:

sudo mail -s "Subject" [email protected] < /path/to/file.txt

Я получаю содержимое файла по электронной почте.

Что здесь происходит не так? Это совсем запутало мою голову!


person Pravesh Jain    schedule 31.07.2015    source источник
comment
Во-первых, убедитесь, что вы запускаете скрипт Python с помощью sudo. Кроме того, вы пытались разделить список, который вы передаете в subprocess.call? (['sudo', 'mail', '-s', Тема, [email protected], '‹', '/path/to/file.txt'']   -  person weirdev    schedule 31.07.2015
comment
Я не думаю, что запуск его, как с sudo, поможет. Видите ли, я все еще получаю почту, только тело отсутствует.   -  person Pravesh Jain    schedule 31.07.2015
comment
Передача текстового файла в mail на стандартном вводе была бы несколько безопаснее и, надеюсь, позволила бы вам полностью избежать sudo, а также устранить необходимость в shell=True.   -  person tripleee    schedule 21.09.2015


Ответы (1)


Как и ожидалось, это была совершенно глупая ошибка (это лучшие).

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

file_name.flush()
file_name.close()
subprocess.call(['sudo mail -s "Subject" [email protected] < /path/to/file.txt'], shell=True)

и почта, которую я получаю, имеет тело. Фу!

person Pravesh Jain    schedule 01.08.2015