2011-12-12 120 views
13

这可能是一些非常基本的东西,但我找不到一个好的解决方案。 我需要编写一个Python脚本,可以从这样的管道接受输入:如何将shell命令输出重定向到Python脚本输入?

$ some-linux-command | my_script.py 

是这样的:

cat email.txt | script.py 

或者它只是被我的.forward文件直接从管道的sendmail 。这意味着如果输入文件具有附件,则输入文件可能比较大,并且可能是电子邮件,稍后我将不得不将数据库放入发件人,主题等内容中,但是我已经编写了数据库脚本在Python中,这样一部分就可以了。 主要问题是如何捕捉从管道流入的数据。从sys.stdin

+0

为什么你注意管道,你能不能把这个结果写到文件中,以后再对它进行操作? –

+5

@SrinivasReddyThatiparthy:pipe是Unix的精髓,你的评论是无效的。 – Stan

回答

3

读,这是像对象的文件

21

使用sys.stdin来读取输入。例如:s.py的

示例内容:

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

- 运行:

#!/usr/bin/env python 

[email protected]:~$ cat t.txt 
    alpha 
    beta 
    gamma 

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

您也可以使用这个家当让python脚本作为shell脚本

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

[email protected]:~$ cat t.txt | ./s.py 
['alpha\n', 'beta\n', 'gamma\n'] 
+0

谢谢,它的工作原理,谢天谢地我可以导入系统在那个盒子上,(它是solaris 10,它有导入其他模块的问题,对于某些模块它会抛出一个“ImportError:ld.so.1:/ usr/local/bin/python:fatal:relocation error:file /usr/local/lib/python2.6/lib-dynload/_socket.so:symbol inet_aton:找不到引用的符号“因为它是solaris上的inet_pton。) – delta

+8

你可以接受它作为正确答案如果有效。 – DhruvPathak