7
我知道我可以通過run test.py
在IPython中運行腳本並從那裏調試。IPython:我如何將東西管道化爲Python腳本
但是,如何將輸出流入test.py?例如,通常我可以在像grep "ABC" input.txt | ./test.py
這樣的命令行中運行,但是如何在IPython中執行相同的操作?
謝謝!
我知道我可以通過run test.py
在IPython中運行腳本並從那裏調試。IPython:我如何將東西管道化爲Python腳本
但是,如何將輸出流入test.py?例如,通常我可以在像grep "ABC" input.txt | ./test.py
這樣的命令行中運行,但是如何在IPython中執行相同的操作?
謝謝!
裏面的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()
不熟悉IPython。任何原因你不能使用sys.stdin或文件輸入模塊? – Triptych
@Triptych我想用特定的輸入進行調試,由grep生成。 – CodeNoob
嘗試使用[fileinput模塊](http://docs.python.org/library/fileinput.html)並查看它是如何發生的。但要真正回答這個問題:是的,你可以做到這一點,但它取決於如何編寫python。 – Keith