运行"管道"来自os.system()命令的脚本

时间:2015-03-30 12:01:15

标签: python pipe

我目前有一个脚本(" monitor"),它监视并输出各种系统类型的数据到屏幕上。我有一个Python程序,当我使用此命令将监视器输出传递给我的Python程序时,后处理该信息。

/usr/local/bin/monitor | /mnt/usbkey/pgms/myMonitorPgm.py

这很好用。

我想使用os.system命令(或其他东西??)来运行监视器脚本并从我的Python程序中创建管道。这将在我启动Python程序时运行,从而消除了上述管道格式/命令的需要。

这可能吗?

2 个答案:

答案 0 :(得分:3)

您应该查看subprocess模块,特别是使用stdout = PIPE创建Popen对象,然后您可以使用communic()或类似方法从Python程序中的管道读取。

例如,你可以这样做:

import subprocess
proc = subprocess.Popen( [ '/usr/local/bin/monitor' ], stdout=subprocess.PIPE )
stdout, _ = proc.communicate()

现在stdout将有运行监控程序的输出。

答案 1 :(得分:0)

在我看来,有效的方法是:

with open('/tmp/mailbody', 'w') as f:
    f.write(body)
os.system('/usr/bin/heirloom-mailx -s ' + subject + ' ' + mail + '< /tmp/mailbody')