Разные результаты при отправке электронного письма с использованием оболочки и через subprocess.call

Код оболочки:

msg = "body of the mail"

echo "$msg" | mailx -s "ERROR" udhai

Код Python:

msg = "body of the mail"

subprocess.call(msg + " | mailx -s 'ERROR:' udhai",shell=True)

Когда я выполняю свой сценарий оболочки, я получаю электронное письмо на учетную запись udhai с оба сообщением (телом письма) и темой («ERROR:»).

Но в моем коде Python я получаю электронное письмо Только с темой.

Как я могу получить электронное письмо с темой и сообщением.

вы можете попробовать: subprocess.call("echo '"+ msg + "' | mailx -s 'ERROR:' udhai",shell=True) и сообщить мне, работает ли он? Если нет, посмотрите на использование конвейера в python: stackoverflow.com/questions/13332268/…

Allan 02.05.2018 08:19

Спасибо. оно работает. Еще раз спасибо

sabarish s 02.05.2018 10:45

Он работает в режиме интерпретатора Python. Но при выполнении моего скрипта python я получаю ошибку ниже. / bin / sh: -c: line 0: неожиданный EOF при поиске соответствия / bin / sh: -c: line 1: синтаксическая ошибка: неожиданный конец файла Позвольте мне проверить наличие любой синтаксической ошибки, и я получу назад к вам

sabarish s 02.05.2018 10:53

хммм странно! Да, дайте мне знать, если вы все еще застряли, нормально, это должно сработать.

Allan 02.05.2018 10:54

Совет новичкам: если ответ решает вашу проблему, примите его, щелкнув большую галочку (✓) рядом с ним, и, при желании, проголосуйте за него (для голосования требуется не менее 15 очков репутации). Если вы нашли другие ответы полезными, проголосуйте за них. Принятие и голосование помогают будущим читателям. См. [Соответствующую статью Справочного центра] [1] [1]: stackoverflow.com/help/someone-answers

Allan 02.05.2018 10:54

Это сработало. Я допустил синтаксическую ошибку. Простите за это . Спасибо за вашу помощь и советы. Я буду следить за этим

sabarish s 02.05.2018 11:37
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
6
102
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете попробовать заменить вызов процесса следующим образом:

subprocess.call("echo '"+ msg + "' | mailx -s 'ERROR:' udhai",shell=True)

в противном случае вы можете изменить его следующим образом:

ps = subprocess.Popen(('echo', msg), stdout=subprocess.PIPE)
output = subprocess.check_output(('mailx', "-s 'ERROR:' udhai"), stdin=ps.stdout)
ps.wait()

см. Команда подпроцесса Python с конвейером

Другие вопросы по теме