如何将shell命令输出重定向到Python脚本输入?

时间:2011-12-12 17:16:47

标签: python shell input pipe

这可能是非常基本的东西,但我找不到一个好的解决方案。 我需要编写一个python脚本,可以接受来自这样的管道的输入:

$ some-linux-command | my_script.py

类似的东西:

cat email.txt | script.py

或者它将直接从sendmail通过我的.forward文件传输。这意味着输入文件可能是一个相对较大的东西,如果它有一个附件,它可能是一个电子邮件,以后我将不得不在数据库中放入发件人,主题等,但我已经编写了数据库脚本在python中,这部分就可以了。 主要问题是如何捕获从管道流入的数据。

2 个答案:

答案 0 :(得分:24)

使用sys.stdin读取输入。示例:

s.py的示例内容:

import sys
data = sys.stdin.readlines()
print data

- 跑步:

    user@xxxxxxx:~$ cat t.txt
    alpha
    beta
    gamma

    user@xxxxxxx:~$ cat t.txt | python ./s.py
    ['alpha\n', 'beta\n', 'gamma\n']

你也可以使用这个Shebang将python脚本作为shell脚本:

#!/usr/bin/env python

并将权限更改为“a + x”

 user@xxxxxxx:~$ cat t.txt |  ./s.py
 ['alpha\n', 'beta\n', 'gamma\n']

答案 1 :(得分:3)

从sys.stdin读取,这是一个类似于对象的文件