Tôi là nhãn hiệu mới với python, đã sử dụng perl trong nhiều năm. Một điều điển hình tôi làm tất cả các thời gian là perl là mở một lệnh như một đường ống và gán đầu ra của nó cho một biến địa phương để xử lý. Nói cách khác:xử lý đầu ra liên tục của lệnh trong python
"open CMD, "$command|";
$output=<CMD>;
một miếng bánh. Tôi nghĩ rằng tôi có thể làm điều gì đó tương tự trong python theo cách này:
args=[command, args...]
process=subprocess.Popen(args, stdout=subprocess.PIPE)
output=process.communicate()
cho đến nay rất tốt. Bây giờ cho câu hỏi lớn ...
Nếu tôi tắt lệnh đó bằng ssh trên nhiều nền tảng, tôi có thể theo dõi các bộ mô tả trong perl bên trong một vòng chọn để xử lý các kết quả khi chúng đến. Tôi đã tìm thấy python chọn và mô-đun thăm dò ý kiến nhưng tôi không hoàn toàn chắc chắn làm thế nào để sử dụng chúng. Các tài liệu cho biết thăm dò ý kiến sẽ có một xử lý tập tin, nhưng khi tôi cố gắng vượt qua biến 'quá trình' ở trên để poll.register() Tôi nhận được một lỗi rằng nó phải là một int hoặc có một phương pháp fileno(). Vì Popen() đã sử dụng thiết bị xuất chuẩn, tôi đã thử gọi
poll.register(process.stdout)
và nó không còn phát ra lỗi, mà thay vào đó chỉ bị treo.
Bất kỳ đề xuất/chỉ dẫn nào về cách tạo ra thứ gì đó giống như tác phẩm này?
quy trình.stdout sẽ là tập tin xử lý cho đối tượng quá trình đó - Tôi không chắc liệu đó là tất cả những gì bạn cần để làm cho nó hoạt động với bình chọn/chọn, tôi đã không sử dụng chúng. – AdamKG
Ngoài ra, lưu ý rằng Popen.communicate() chặn cho đến khi EOF - có thể bạn sẽ muốn loại bỏ điều đó. – AdamKG
ahh, tôi hiểu rồi. rõ ràng KHÔNG muốn chặn. rất nhiều cấu trúc mới để thử và quấn bộ não của tôi xung quanh. -mark –