如何从环境接收数据,例如庆典

时间:2013-12-22 03:03:00

标签: python bash

如何从shell中读取参数,其他一些程序是通过bash管道流传输的?其次,print i是将数据流式传输到环境的正确方法吗?

  

我的搜索引导我通过ossubprocess模块,但随后:   子进程模块允许您生成新进程,连接到它们的输入/输出/错误管道,并获取它们的返回代码。

但是,我不希望一个程序产生另一个程序,而且需要从fifo中写入和读取。

3 个答案:

答案 0 :(得分:1)

最快的方法是做一些事情:

#!/usr/bin/python

import sys

def main():
    while True:
        block = sys.stdin.read(2**20)
        if not block:
            break
        # manipulate block somehow
        sys.stdout.write(block)

...但只有在你可以有效地操纵块时才能正常工作。如果你需要操纵线条,最好做一些像J.Z.建议。打印适用于行数据,但我倾向于依赖于sys.stdout.write。

答案 1 :(得分:1)

你可以sys.stdin.readlines

➜  superlists git:(master) ✗ ls -la | python -c "import sys;print sys.stdin.readlines()"
['total 24\n', 'drwxr-xr-x   8 kracekumar  staff   272 Dec 19 00:42 .\n', 'drwxr-xr-x@  4  kracekumar  staff   136 Dec 18 01:03 ..\n', 'drwxr-xr-x  13 kracekumar  staff   442 Dec 22 10:38 .git\n', '-rw-r--r--   1 kracekumar  staff    18 Dec 18 01:10 .gitignore\n', '-rw-r--r--   1 kracekumar  staff  1463 Dec 19 00:42 function_tests.py\n', 'drwxr-xr-x  13 kracekumar  staff   442 Dec 19 00:37 lists\n', '-rw-r--r--   1 kracekumar  staff   253 Dec 18 01:03 manage.py\n', 'drwxr-xr-x  11 kracekumar  staff   374 Dec 19 00:29 superlists\n']

注意:

如果将内容传递给shell的程序没有发送EOF,则python代码将挂起。

答案 2 :(得分:0)

这将从stdin一次读取一行并打印出来(你显然会对该行执行其他操作,例如将split()分解为标记或以其他方式解析):

import sys

for line in sys.stdin:
    print line