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

17 投票
2 回答
18263 浏览
提问于 2025-04-17 08:13

这可能是个很基础的问题,但我找不到好的解决办法。

我需要写一个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']

撰写回答