如何从shell中读取参数,其他一些程序是通过bash管道流传输的?其次,print i
是将数据流式传输到环境的正确方法吗?
我的搜索引导我通过
os
到subprocess
模块,但随后: 子进程模块允许您生成新进程,连接到它们的输入/输出/错误管道,并获取它们的返回代码。
但是,我不希望一个程序产生另一个程序,而且需要从fifo中写入和读取。
答案 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