2012-06-22 39 views
5

Tôi đang cố gắng để hướng dẫn python của tôi để thực hiện mong đợi kịch bản "myexpect.sh":Cách đơn giản nhất để chạy kịch bản mong đợi từ python

#!/usr/bin/expect 
spawn ssh [email protected] 
expect "password:" 
send "mypassword\n"; 
send "./mycommand1\r" 
send "./mycommand2\r" 
interact 

Tôi đang trên cửa sổ để lại viết những dòng trong mong đợi script vào python không phải là một tùy chọn. Bất kỳ đề xuất? Có bất cứ điều gì có thể chạy nó theo cách "./myexpect.sh" không từ một bash shell? Cảm ơn bạn đã giúp đỡ.


chỉnh sửa: Tôi đã có một số thành công với lệnh subprocess

subprocess.call("myexpect.sh", shell=True) 

tôi nhận được lỗi: 'myexpect.sh không phải là một ứng dụng Win32 hợp lệ' Bất cứ đề nghị nào về cách để giải quyết vấn đề này?

+0

... các người hỏi làm thế nào để chạy một kịch bản bash trên Windows mà không bash? Tôi thậm chí không thấy Python ở đâu. Hơn nữa, bạn có lẽ nên cung cấp cho phần mở rộng .txt để kịch bản shell của bạn (.sh nếu bất cứ điều gì) –

+0

@MateuszKowalczyk trong một ý nghĩa có: Tôi muốn tự động chạy kịch bản này, từ một tập tin .py - khi tôi chạy tập tin .py, tập lệnh mong đợi sẽ được gọi và chạy như một phần của chuỗi tệp .py. – gortron

+0

Vì vậy, có vẻ như bạn không tìm kiếm một giải pháp liên quan đến python nào cả (ngoài thực tế là nó đang được kiểm soát từ Python). Bạn chỉ muốn một chương trình trên Windows có thể đọc được kịch bản mong đợi và thực thi nó, đúng không? –

Trả lời

13

Sử dụng pexpect library. Đây là phiên bản python cho chức năng mong đợi.

Ví dụ:

child = pexpect.spawn('some command that requires password') 
child.expect('Enter password:') 
child.sendline('password') 
child.expect(pexpect.EOF, timeout=None) 
cmd_show_data = child.before 
cmd_output = cmd_show_data.split('\r\n') 
for data in cmd_output: 
    print data 

Pexpect đi kèm với rất nhiều ví dụ để học hỏi từ. Đối với sử dụng tương tác với nhau() kiểm tra script.py từ các ví dụ

[Edit: Đối với cửa sổ, có một thay thế cho Pexpect]

+0

pexpect là một giải pháp tuyệt vời nếu bạn đang sử dụng nền tảng Linux, nhưng không có thư viện pexpect có sẵn cho nền tảng Windows. – gortron

+0

@gortron: Đã có một cuộc thảo luận SO về tương đương pexpect cho các cửa sổ. Tôi đã thêm vào câu trả lời. Xem nếu điều đó giúp. – pyfunc

+0

Đối với hậu thế: winpexpect là một giải pháp sạch. – gortron

0

Vì nó là một tập lệnh .expect, tôi nghĩ bạn nên thay đổi tên mở rộng của tập lệnh. Thay vì sử dụng

subprocess.call("myexpect.sh", shell=True) 

Bạn nên sử dụng

subprocess.call("myexpect.expect", shell=True) 
Các vấn đề liên quan