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

del*_*lta 16 python shell input pipe

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

$ some-linux-command | my_script.py
Run Code Online (Sandbox Code Playgroud)

这样的事情:

cat email.txt | script.py
Run Code Online (Sandbox Code Playgroud)

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

Dhr*_*hak 25

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

s.py的示例内容:

import sys
data = sys.stdin.readlines()
print data
Run Code Online (Sandbox Code Playgroud)

- 跑步:

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

    user@xxxxxxx:~$ cat t.txt | python ./s.py
    ['alpha\n', 'beta\n', 'gamma\n']
Run Code Online (Sandbox Code Playgroud)

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

#!/usr/bin/env python
Run Code Online (Sandbox Code Playgroud)

并将权限更改为'a + x'

 user@xxxxxxx:~$ cat t.txt |  ./s.py
 ['alpha\n', 'beta\n', 'gamma\n']
Run Code Online (Sandbox Code Playgroud)

  • 如果它有效,你可以接受它作为正确的答案. (8认同)

zch*_*nah 3

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