2009-10-19 35 views

Trả lời

7

Tôi không biết chính xác những gì bạn có nghĩa là bằng cách đệm trong bối cảnh này, nhưng nó là khá đơn giản để làm những gì bạn đang yêu cầu ...

so_gen.py (tạo một dòng liên tục mà chúng ta có thể xem) :

import time 
import sys 
while True: 
    for char in 'abcdefx': 
     sys.stdout.write(char) 
     sys.stdout.flush() 
     time.sleep(0.1) 

so_filter.py (làm những gì bạn hỏi):

import sys 
while True: 
    char = sys.stdin.read(1) 
    if not char: 
     break 
    if char != 'x': 
     sys.stdout.write(char) 
     sys.stdout.flush() 

Thử chạy python so_gen.py | python so_filter.py để xem những gì nó làm.

+1

người chiến thắng để viết 'nếu không char: break' – flybywire

+1

@flybywire: Câu trả lời của anh cần nó, không có câu trả lời nào khác ... –

13

Đọc từ sys.stdin và viết thư đến sys.stdout (hoặc sử dụng print). Chương trình mẫu của bạn:

import sys 

for line in sys.stdin: 
    print line.replace("x", ""), 

Không có cách tiêu chuẩn để làm cho stdin không bị chặn và bạn không muốn điều đó. Hãy để hệ điều hành đệm nó.

+2

Ông ấy đã nói "không bị chặn" nhưng tôi không chắc nó thực sự quan trọng. –

+0

Tôi đã chỉnh sửa câu trả lời của mình khi bạn nhận xét. –

9

Bạn có thể sử dụng fileinput class, cho phép bạn xử lý các yếu tố đầu vào như toán tử kim cương Perl. Từ tài liệu:

import fileinput 
for line in fileinput.input(): 
    process(line) 

nơi quy trình thực hiện điều gì đó như print line.replace('x','').

Bạn có thể theo dõi this StackOverflow question để biết cách loại bỏ chế độ stdout. Hoặc bạn chỉ có thể gọi sys.stdout.flush() sau mỗi print.

+0

Ah! Điều này làm cho tất cả các công việc phụ tôi đã làm vì tôi bỏ lỡ Perl vô ích! Tôi cần phải đi qua thư viện chuẩn Python rất chặt chẽ. –

2

Sử dụng công tắc -u cho trình thông dịch trăn để làm cho tất cả các lần đọc và ghi không bị chặn. Tương tự như thiết lập $| = true; trong Perl. Sau đó tiến hành như bạn muốn, đọc một dòng sửa đổi nó và sau đó in nó. sys.stdout.flush() không bắt buộc.

#!/path/to/python -u 

import sys 

for line in sys.stdin: 
    process_line(line) 
+0

Không hoạt động tại đây ... –

Các vấn đề liên quan