我正在为python重写一个shell脚本,其中一部分包括通过mailx发送通知。我似乎不能正确处理子进程。
result = subprocess.run(["/bin/mailx", "-r", "sender@email.com", "-s", "Test", "recipient@email.com"], check=True)
当我在服务器上运行这个命令时,命令返回一个空行,“将不完成”,我认为这可能是因为mailx在等待电子邮件正文,因为当我尝试在没有正文的情况下发送bash时,我得到了类似的问题,所以我得到了以下提示:
result = subprocess.run(["echo", "Testing", "|", /bin/mailx", "-r", "sender@email.com", "-s", "Test", "recipient@email.com"], check=True)和result = subprocess.run(["/bin/mailx", "-r", "sender@email.com", "-s", "Test", "recipient@email.com", b"Testingtesting"], check=True)在测试1时,它只会在echo之后回显所有内容。当测试2时,我再次得到空白行。
发布于 2021-01-28 11:53:14
使用subprocess.Popen,您可以如下所示:
import subprocess
cmd = """
echo 'Message Body' | mailx -s 'Message Title' -r sender@someone.com receiver@example.com
"""
result = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
output, errors = result.communicate()关于来自shell=True的文档
shell=False禁用所有基于shell的特性,但不受此漏洞的影响;请参阅Popen构造函数文档中的备注,以获得使shell=False正常工作的有用提示。在命令字符串是从外部输入构造的情况下,强烈禁止使用shell=True。
在您的情况下,如果您没有将用户输入传递给subprocess.Popen,那么您是安全的。
https://stackoverflow.com/questions/65934654
复制相似问题