【问题标题】:Using os.system() in python to execute linux command在python中使用os.system()来执行linux命令
【发布时间】:2014-10-24 20:31:21
【问题描述】:

我在 python 中使用脚本从 Postfix 服务器获取邮件。此脚本获取邮件,删除标题并仅保留电子邮件正文。然后它使用这个body 来执行os.system() 的linux 命令。例如,我用mkdir folder 发送电子邮件,脚本创建了这个。

问题是当我通过邮件发送ls 时。我有回复: not found ls

第二个问题是mkdir,因为它会将^M 添加到电子邮件中的名称中。例如,我发送了mkdir folder,它创建了“folder?”。

你有什么想法吗?

【问题讨论】:

  • 你能显示一些代码吗,os.system("ls") 非常适合我。
  • 考虑使用emailsmtplib 模块来完成此任务。也希望没有人知道你的电子邮件地址并发送rm -rf / :)
  • 子进程的响应相同。这是离开 body 并执行 os.system 的部分。以前的只是获取电子邮件。 for part in msg.walk(): #print only body of mail if part.get_content_maintype() == 'multipart': continue if part.get_content_subtype() != 'plain': continue payload = part.get_payload() print payload os.system(payload) 如果我使用 os.system("ls") 它可以工作,但我需要变量

标签: python linux imap ls os.system


【解决方案1】:

您已经发现了问题:电子邮件中包含您不期望的 ^M 个字符。 (CR LF 是一种常见的行结束约定;Unix 通常不喜欢 CR)。

尝试从您的命令中删除“\r”:command = command.translate(None, "\r")

我还敦促您仔细考虑运行通过电子邮件传递的任何命令的安全隐患。可能有一种更安全的方法来完成您想要完成的工作。

【讨论】:

  • 非常感谢!我添加了 payload = payload.translate(None, "\r") 并解决了这两个问题。
最近更新 更多