IPython:如何将内容输入Python脚本

时间:2012-05-19 02:25:30

标签: python pipe ipython

我知道我可以通过run test.py在IPython中运行脚本并从那里进行调试。

但是如何将输出传输到test.py?例如,通常我可以在命令行中运行grep "ABC" input.txt | ./test.py,但是如何在IPython中执行相同的操作?

谢谢!

1 个答案:

答案 0 :(得分:6)

在Python脚本中你应该从sys.stdin中读取:

import sys

INPUT = sys.stdin

def do_something_with_data(line):
    # Do your magic here
    ...
    return result

def main():
    for line in INPUT:
        print 'Result:', do_something_with_data(line)

if __name__ == '__main__':
    main()

在迭代解释器中,您可以使用subprocess模块mock sys.stdin。

In[0]: from test.py import *
In[1]: INPUT = subprocess.Popen(['grep', 'ABC', 'input.txt'], \
                               stdout=subprocess.PIPE).stdout
In[2]: main()

您还可以将输出传输到文件,只需从文件中读取即可。出于实际目的,stdin只是另一个文件。

In[0]: ! grep "ABC" input.txt > output.txt
In[1]: INPUT = open('output.txt')
In[2]: main()