Tôi muốn viết một chương trình đọc stdin (unbuffered) và viết stdout (unbuffered) làm một số chuyển đổi char-by-char tầm thường. Vì lợi ích của ví dụ, giả sử tôi muốn xóa tất cả các ký tự x
khỏi stdin.Làm cách nào để viết bộ lọc unix trong python?
Trả lời
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.
Đọ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ó.
Ông ấy đã nói "không bị chặn" nhưng tôi không chắc nó thực sự quan trọng. –
Tôi đã chỉnh sửa câu trả lời của mình khi bạn nhận xét. –
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
.
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ẽ. –
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)
Không hoạt động tại đây ... –
- 1. Làm cách nào để viết chương trình lọc trong C?
- 2. Làm cách nào để viết bộ lọc tùy chỉnh HAML?
- 3. Cách lấy bộ lọc gaussian trong python
- 4. Cách viết bộ lọc thư rác
- 5. Làm cách nào để truy xuất FacesContext trong Bộ lọc
- 6. Trong IE, làm cách nào để xóa bộ lọc?
- 7. Làm thế nào để viết một bộ lọc tùy chỉnh trong bảo mật mùa xuân?
- 8. bộ lọc log4net - cách viết và lọc để bỏ qua thông báo tường trình
- 9. Tôi làm cách nào để lọc không bình đẳng trong bộ lọc truy vấn Django?
- 10. Cách áp dụng bộ lọc cho tín hiệu trong python
- 11. kalman bộ lọc 2d trong python
- 12. Làm cách nào để viết ký tự dòng mới vào bộ mô tả tệp bằng Python?
- 13. Trong Django QuerySet, làm cách nào để làm phủ định trong bộ lọc?
- 14. Bộ lọc trong Python3
- 15. Làm cách nào để triển khai Unix grep trong Perl?
- 16. Làm cách nào để ghi đè bộ lọc trong ArrayAdapter của Android?
- 17. Làm cách nào để tạo các dấu thời gian Unix?
- 18. Làm thế nào để viết GUI bằng Python?
- 19. Làm cách nào để lọc web trong JSF 2?
- 20. làm cách nào để tôi có thể thực hiện bộ lọc từ/bộ lọc từ xấu của jQuery?
- 21. Làm cách nào để bảo vệ bộ lọc tìm kiếm trong jqGrid khi tải lại trang?
- 22. Làm cách nào để viết danh sách nổi danh sách để ghi trong Python
- 23. Bộ lọc nở hiện đại, hiệu năng cao trong Python?
- 24. Cách bỏ qua bộ lọc trong chuỗi bộ lọc trong java
- 25. Cách lọc w.r.t. nhiều trường trong oData bằng bộ lọc $?
- 26. Làm cách nào để tạo hộp văn bản bộ lọc tìm kiếm trong Jquery?
- 27. Làm cách nào để giảm độ mờ đục của lớp alpha trong bộ lọc svg?
- 28. Tôi làm cách nào để thêm bộ lọc vào đối tượng SVG trong JavaScript?
- 29. Làm cách nào để sử dụng VÀ trong bộ lọc Django?
- 30. Làm cách nào để so sánh chuỗi với danh sách "bộ lọc" trong LINQ?
người chiến thắng để viết 'nếu không char: break' – flybywire
@flybywire: Câu trả lời của anh cần nó, không có câu trả lời nào khác ... –