Tôi có một kịch bản mà tôi muốn chạy từ bên trong python (2.6.5) mà sau logic dưới đây:Chạy một lệnh tương tác từ bên trong python
- Nhắc người dùng nhập mật khẩu. Có vẻ như ("Nhập mật khẩu:") (* Lưu ý: Đầu vào không phản hồi màn hình)
- Thông tin không liên quan đến đầu ra
- Nhắc người dùng trả lời ("Blah Blah filename.txt blah blah (Y/N) ?:")
Dòng nhắc cuối cùng chứa văn bản cần phân tích cú pháp (filename.txt). Phản hồi được cung cấp không quan trọng (Chương trình có thể thực sự thoát ra ở đây mà không cung cấp, miễn là tôi có thể phân tích cú pháp dòng)
Yêu cầu của tôi là tương tự Wrapping an interactive command line application in a python script. Có lẽ chỉ hơi dày một chút, nhưng câu trả lời có vẻ hơi khó hiểu, và tôi vẫn bị treo ngay cả khi OP đề cập rằng nó không 'cho anh ta.
Thông qua tìm kiếm xung quanh, tôi đi đến kết luận rằng quy trình con là cách tốt nhất để thực hiện việc này, nhưng Im có một số vấn đề. Popen dòng dưới
p = subprocess.Popen("cmd", shell=True, stdout=subprocess.PIPE,
stderr=subprocess.STDOUT, stdin=subprocess.PIPE)
Khi tôi gọi một read() hoặc readline() trên thiết bị xuất chuẩn, dấu nhắc là máy in để màn hình và nó bị treo.
Nếu tôi gọi ghi ("password \ n") cho stdin, dấu nhắc được ghi lên màn hình và nó bị treo. Các văn bản trong write() không được viết (Tôi không di chuyển con trỏ một dòng mới).
Nếu tôi gọi p.communicate ("password \ n"), hành vi tương tự như ghi()
tôi đang tìm kiếm một vài ý tưởng ở đây về cách tốt nhất để đầu vào stdin và có thể làm thế nào để phân tích dòng cuối cùng trong đầu ra nếu cảm giác của bạn hào phóng, mặc dù tôi có thể có thể con số đó ra cuối cùng. Cảm ơn!
Bạn nên nhìn vào Pexpect: http://www.noah.org/wiki/pexpect –
Tôi nghĩ rằng bạn cần phải viết thư cho stdout và đọc từ stdin ... không phải là otherway xung quanh như bạn đặt trên –
@Joran haha yeah, xin lỗi. Đó là điều tôi muốn nói. – user1521597