如何将shell命令输出重定向到Python脚本输入?
这可能是个很基础的问题,但我找不到好的解决办法。
我需要写一个Python脚本,可以接受从管道输入的数据,像这样:
$ some-linux-command | my_script.py
大概是这样的:
cat email.txt | script.py
或者这些数据会直接通过我的.forward文件从sendmail传过来。这意味着输入的数据可能会比较大,尤其是如果有附件的话,通常会是电子邮件。之后我还需要把发件人、主题等信息放进数据库里,不过我已经写过Python的数据库脚本,所以那部分没问题。
主要的问题是,如何捕捉从管道流入的数据。
2 个回答
3
从 sys.stdin 读取,这就像一个文件一样的东西。
28
使用 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']