2012-05-19 27 views
7

Tôi hiểu rằng tôi có thể chạy tập lệnh trong IPython qua run test.py và gỡ lỗi từ đó.IPython: làm cách nào để tôi đưa thứ gì đó vào tập lệnh Python

Nhưng làm cách nào để đưa đầu ra vào test.py? Ví dụ, thông thường tôi có thể chạy trong dòng lệnh như grep "ABC" input.txt | ./test.py, nhưng làm cách nào để làm điều tương tự trong IPython?

Cảm ơn!

+0

Không quen thuộc với IPython. Bất kỳ lý do bạn không thể sử dụng sys.stdin hoặc module fileinput? – Triptych

+0

@Triptych Tôi muốn gỡ lỗi với đầu vào cụ thể đó, được tạo bởi grep. – CodeNoob

+0

Hãy thử sử dụng [mô đun tệp tin đầu ra] (http://docs.python.org/library/fileinput.html) và xem cách thức hoạt động. Nhưng để thực sự trả lời câu hỏi này: có, bạn có thể làm điều đó nhưng nó phụ thuộc vào cách python được viết. – Keith

Trả lời

6

Bên trong kịch bản Python bạn nên đọc từ 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() 

Bên trong phiên dịch lặp đi lặp lại, bạn có thể sử dụng các mô-đun subprocess sys.stdin giả.

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

Bạn cũng có thể thêm đầu ra vào tệp và chỉ đọc từ tệp. Đối với mục đích thực tế stdin chỉ là một tập tin khác.

In[0]: ! grep "ABC" input.txt > output.txt 
In[1]: INPUT = open('output.txt') 
In[2]: main() 
Các vấn đề liên quan