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

Running a "piping" script from an os.system() command

我目前有一个脚本 ("monitor") 可以监视各种系统类型的数据并将其输出到屏幕。当我使用此命令将监视器输出通过管道传输到我的 Python 程序时,我有一个 Python 程序正在 post 处理该信息。

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

这么多工作正常。

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

的需要

这可能吗?

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

例如,您可以这样做:

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

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

就我而言,有效的方法是:

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