Nền: Tôi đang sử dụng python và paramiko để tự động hóa quá trình tôi thực hiện mọi lúc. Chúng tôi sử dụng một lệnh gọi là "handin" để gửi mã nguồn, nhưng điều này phải được thực hiện từ một máy tính trường học. Vì vậy, khi tôi gửi mã từ nhà, tôi phải: sftp vào máy chủ trường học, đặt các tệp trong thư mục, ssh vào máy tính của trường học, sử dụng lệnh 'handin'Kịch bản lệnh Python, vấn đề đọc đầu ra trong quá trình exec_command()
Tôi có thể đặt thành công tệp lên máy trường học. Vấn đề xảy ra khi tôi cố gắng sử dụng exec_command ('handin các tập tin của tôi') và sau đó đọc đầu ra để xác định hành động tiếp theo.
vì vậy tôi có
try:
(stdin, stdout, stderr) = client.exec_command(s)
except:
print 'whoops'
sys.exit()
print stdout.readlines()
Nhưng điều này gây ra một bế tắc đối với một số lý do, kịch bản dường như không làm gì cả và tôi phải cuối cùng giết chết toàn bộ quá trình (ctrl + c doesnt work). Im không chắc chắn nếu exec_command không hoàn thành chính xác (mặc dù nó là nhận ra khỏi khối try/catch) hoặc nếu im có vấn đề về mạng hoặc những gì.
Bất kỳ ý tưởng nào?
cập nhật:
Sự cố là tương tác với lệnh handin trong khi thực thi. Sau khi thực thi lệnh, handin có thể hoặc vẫn chưa chạy được. Nếu đây là lần đầu tiên gửi thành công, hãy nói blah blah và kết thúc thực hiện. Tất cả đều tốt. Nhưng nếu tôi gửi lại, tôi phải ủy quyền ghi đè (stdin.write ('y')) cho mỗi tệp.
TL/DR:
Làm thế nào để kiểm tra xem một exec_command() vẫn chạy, chờ đợi đầu vào, và readline() từ stdout cho phù hợp?
Bạn có giải pháp cho TL/DR không? Ngoài ra, làm cách nào tôi có thể biết văn bản trước khi chờ nhập liệu, ví dụ: @ mật khẩu ... –