2012-05-19 58 views
7

我知道我可以通過run test.py在IPython中運行腳本並從那裏調試。IPython:我如何將東西管道化爲Python腳本

但是,如何將輸出流入test.py?例如,通常我可以在像grep "ABC" input.txt | ./test.py這樣的命令行中運行,但是如何在IPython中執行相同的操作?

謝謝!

+0

不熟悉IPython。任何原因你不能使用sys.stdin或文件輸入模塊? – Triptych

+0

@Triptych我想用特定的輸入進行調試,由grep生成。 – CodeNoob

+0

嘗試使用[fileinput模塊](http://docs.python.org/library/fileinput.html)並查看它是如何發生的。但要真正回答這個問題:是的,你可以做到這一點,但它取決於如何編寫python。 – Keith

回答

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模塊模擬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() 
相關問題