Hướng dẫn stdin.flush() python paramiko - stdin.flush () python paramiko
Tôi đang cố bắt chước hành vi sau trong tập lệnh Python: Tôi đang chạy lệnh sau trên máy chủ từ xa bằng SSH:
Sau đó, tôi nhận được màn hình "Chào mừng" sau đây trong GDB:
Nhấn "C" cho đầu ra sau:
Sau đó, khi tôi kết nối bằng NetCat với máy chủ bằng một cổng khác, tôi nhận được đầu ra sau trong GDB:
ID quy trình mới là tất cả những gì tôi cần, đó là lý do tại sao tôi muốn tự động hóa quá trình. Tôi có kịch bản Python sau:
Vấn đề là, tôi đang nhận được cùng một đầu ra nhưng bằng cách nào đó tôi không nhận được "[quá trình mới *]", ngay cả khi tôi kết nối sử dụng NC theo cùng một cách chính xác. Hơn nữa, chỉ khi tôi đóng kết nối NC, tôi thấy đầu ra, nhưng sau đó đã quá muộn vì quá trình đã chết. Có vẻ như bộ đệm của đầu ra cần được làm mới vào thời điểm đó, điều mà nó dường như không làm Có phương pháp nào để xả bộ đệm gửi không? Tôi thấy recv () nhận được lệnh được gửi trước đó là echo bởi ký tự từ xa theo ký tự chứ không phải là một slurp. Tò mò làm thế nào mà có thể tránh được. Thêm một độ trễ nhỏ trước khi recv () sửa chữa điều này, nhưng điều đó rõ ràng là không tối ưu. Tôi đang tìm kiếm một số phương pháp tuôn ra, nhưng tôi không tìm thấy một phương pháp. Cảm ơn Bởi 'Gửi bộ đệm', bạn có nghĩa là Bạn có thể thử Cảm ơn phản hồi, vì trường hợp sử dụng cụ thể là các thiết bị mạng, tôi không chắc có cách dừng tiếng vang của các lệnh được đánh máy. Thật tốt cho chúng tôi khi thấy sự tương tác "đầy đủ" từ các thiết bị cũng như thể nó có thể được sàng lọc clis. FYI, phương thức Flush () dường như không có tác động. Tôi đang cố gắng hiểu nơi bộ đệm thực sự xảy ra. Một thời gian đơn giản Lớp ________ 9 ________ 10¶ Lớp cơ sở có thể tái sử dụng để triển khai bộ đệm tệp kiểu Python xung quanh một luồng đơn giản hơn. ________ 11 ()()¶Trả về một trình lặp có thể được sử dụng để lặp lại các dòng trong tệp này. Trình lặp này xảy ra để tự trả lại tệp, vì một tệp là trình lặp riêng của nó.
Trả về dòng tiếp theo từ đầu vào hoặc tăng 4 khi EOF bị tấn công. Không giống như các đối tượng tệp Python, nó có thể trộn các cuộc gọi vào 5 và 6.
Đóng tệp. Các hoạt động đọc và viết trong tương lai sẽ thất bại. ________ 20 ()()¶Viết ra bất kỳ dữ liệu trong bộ đệm ghi. Điều này có thể không làm gì nếu bộ đệm ghi không được bật. ________ 21 (size = none) ¶(size=None)¶Đọc nhiều nhất 2 byte từ tệp (ít hơn nếu chúng tôi nhấn vào cuối tệp trước). Nếu đối số 2 là âm hoặc bị bỏ qua, hãy đọc tất cả các dữ liệu còn lại trong tệp.Ghi chú Cờ chế độ 4 bị bỏ qua ( 5 trong 6), bởi vì SSH coi tất cả các tệp là nhị phân, vì chúng tôi không biết mã hóa tệp là gì hoặc ngay cả khi tệp là dữ liệu văn bản.
Kiểm tra xem tệp có thể được đọc từ.
Đọc tối đa 2 byte thành 3 buff và trả lại số byte đọc.
Đọc toàn bộ dòng từ tệp. Một ký tự dòng mới được giữ trong chuỗi (nhưng có thể vắng mặt khi một tệp kết thúc bằng một dòng không hoàn chỉnh). Nếu đối số kích thước có mặt và không âm, thì đó là số byte tối đa (bao gồm cả dòng mới) và một dòng không hoàn chỉnh có thể được trả về. Một chuỗi trống chỉ được trả về khi EOF gặp phải ngay lập tức. Ghi chú Cờ chế độ 4 bị bỏ qua ( 5 trong 6), bởi vì SSH coi tất cả các tệp là nhị phân, vì chúng tôi không biết mã hóa tệp là gì hoặc ngay cả khi tệp là dữ liệu văn bản.
8 nếu tệp có thể được đọc từ. Nếu 9, 0 sẽ tăng một ngoại lệ.
________ 34 (size = none) ¶ Ghi chú Cờ chế độ 4 bị bỏ qua ( 5 trong 6), bởi vì SSH coi tất cả các tệp là nhị phân, vì chúng tôi không biết mã hóa tệp là gì hoặc ngay cả khi tệp là dữ liệu văn bản.
Kiểm tra xem tệp có hỗ trợ truy cập ngẫu nhiên không.
Trả về vị trí hiện tại của tập tin. Điều này có thể không chính xác hoặc hữu ích nếu tệp cơ bản không hỗ trợ truy cập ngẫu nhiên hoặc được mở ở chế độ phụ lục.
Kiểm tra xem tệp có thể được ghi vào.
Viết dữ liệu vào tệp. Nếu bộ đệm ghi được bật (
Viết một chuỗi các chuỗi vào tệp. Trình tự có thể là bất kỳ đối tượng nào có thể tạo ra các chuỗi, thường là một danh sách các chuỗi. (Tên được dự định để khớp
Giống hệt với |