У вас есть две ошибки: вы хотите избежать subprocess.Popen
и хотите избежать shell=True
. Если у вас достаточно новый Python, используйте subprocess.run()
:
result = subprocess.run(
['mailx', '-v', '-s', 'Subject',
'-S', 'ssl-verify=ignore', '-S', 'smtp-auth=login',
'-S', 'smtp=smtps://email-smtp.us-west-2.amazonaws.com:465',
'-S', 'from=A Person', '-S', 'replyto=Another Person',
'-S', 'smtp-auth-user={}'.format(user),
'-S', 'smtp-auth-password={}'.format(pass),
'-S', 'nss-config-dir=/etc/pki/nssdb/',
'person3@domain3.com'],
check=True)
(Обратите внимание также, как отбрасывание оболочки избавляет от многих надоедливых цитирований оболочки.)
Если ваш Python слишком стар, чтобы иметь subpsocess.run
, попробуйте subprocess.check_call
. Низкоуровневый Popen
сам по себе не является неправильным, но он требует много работы, о которой, конечно же, заботятся высокоуровневые функции и которая отсутствует в вашем коде.