2009-09-24 33 views
7

Tôi đã kế thừa ứng dụng tương tác dòng lệnh tương tác 20 tuổi không còn được nhà cung cấp hỗ trợ. Chúng tôi cần tự động hóa một số tác vụ trong ứng dụng này.Làm cách nào để kiểm soát ứng dụng Unix tương tác bằng Perl?

Các rắc rối nhất trong số này đang tạo ra hàng ngàn kỷ lục mới với các thông số hơi khác nhau (ví dụ định danh khác nhau, tên gọi khác nhau). Các bản ghi phải được tạo theo thứ tự, mỗi lần một lần, sẽ mất nhiều tháng (và do đó đô la) để làm thủ công. Trong hầu hết các trường hợp, việc tạo một bản ghi có mô hình khóa có thể dự đoán được trong các lệnh, đọc phản hồi, khóa trong các lệnh khác, v.v. Tuy nhiên, một số hoạt động tạo bản ghi sẽ dẫn đến các điều kiện lỗi ('bản ghi với số nhận dạng này đã tồn tại') một bộ lệnh khác để thoát ra một cách duyên dáng.

tôi có thể thấy một vài cách khác nhau để làm điều này:

  • ống đặt tên. Viết một kịch bản Perl chạy ứng dụng đích với STDIN và STDOUT được đặt thành các đường ống có tên, sau đó gửi ứng dụng đích trình tự các lệnh để tạo một bản ghi với các tham số cần thiết, và sau đó hướng dẫn ứng dụng đích thoát ra và tắt. Sau đó, chúng tôi chạy tập lệnh nhiều lần theo yêu cầu với các thông số khác nhau.

  • Application. Tìm một công cụ Unix khác có thể được sử dụng để viết các chương trình tương tác. Những người duy nhất tôi đã có thể tìm thấy mặc dù là expect, nhưng điều này dường như không được duy trì hàng đầu; và trò chuyện, mà tôi nhớ lại từ nhiều năm trước, và điều đó dường như làm nhiều hơn hoặc ít hơn những gì tôi muốn, nhưng dường như chỉ dành cho việc điều khiển các modem.

Một biến chứng tiềm năng khác: Tôi nghĩ ứng dụng đích được viết cho thiết bị đầu cuối VT100 và nó sử dụng một số loại trình tự thoát để làm những việc như đánh dấu.

Câu hỏi của tôi là tiếp cận những gì tôi nên dùng? Một trong số đó, hoặc một cái gì đó hoàn toàn khác? Tôi khá thích ý tưởng sử dụng các đường ống có tên và sau đó có một kịch bản Perl mở FIFO và đọc và ghi theo yêu cầu, vì nó cung cấp nhiều tính linh hoạt, nhưng từ những gì tôi đọc, có vẻ như có nhiều vấn đề tiềm năng Tôi đi xuống con đường này.

Xin cảm ơn trước.

+1

kỳ vọng hiện đã có trên sourceforge http://sourceforge.net/projects/expect/ – Mark

+0

Cập nhật: Tôi có các giải pháp về cách sử dụng Expect.pm. cám ơn tất cả những người đã hồi đáp. Tôi có thể SSH đến máy chủ thử nghiệm, khởi động ứng dụng và bắt đầu tương tác với nó. Có vẻ như các mã điều khiển VT100 khá đơn giản. Hiện tại tôi không có tài khoản, nhưng tôi đã học được một vài tên người dùng, vì vậy tôi nghĩ thử nghiệm tự động hóa đầu tiên của tôi sẽ là một cuộc tấn công từ điển vào tài khoản người biểu tình ... –

Trả lời

12

tôi chắc chắn muốn dính vào Perl cho sự linh hoạt bổ sung, như hỗn loạn gợi ý. Bạn có biết về số Expect perl module không? Nó đẹp hơn rất nhiều so với cách tiếp cận ống có tên.

Cũng lưu ý với đường ống được đặt tên, bạn không thể ép buộc đầu ra trở lại từ ứng dụng di sản của bạn sẽ được unbuffered, mà có thể gây phiền nhiễu. Tôi nghĩ rằng Expect.pm sử dụng giả-ttys để giải quyết vấn đề này, nhưng tôi không chắc chắn. Xem phần thảo luận trong perlipc trong phần "Bidirectional Communication with Another Process" để biết thêm chi tiết.

+0

Tôi không biết về mô-đun Perl Mong đợi, vì vậy tôi cho nó một whirl. Có vẻ hứa hẹn cho đến nay, tài liệu là một chút ánh sáng mặc dù - tôi có lẽ cần phải đọc lên trên mong đợi ban đầu. –

4

expect vững chắc hơn nhiều so với bạn có thể cho nó tín dụng, nhưng nếu tôi là bạn tôi vẫn đi với tùy chọn Perl, muốn có một ngôn ngữ lập trình đầy đủ và quen thuộc để quản lý quá trình và tự tin rằng bất kỳ vấn đề lạ nào nảy sinh, sẽ có cách giải quyết chúng.

4

Mong đợi, hoặc là với Tcl hoặc Perl implementation s, sẽ là nỗ lực đầu tiên của tôi. Nếu bạn đang nhìn thấy các chuỗi kỳ lạ trong đầu ra bởi vì nó đang làm những điều đầu cuối lẻ, chỉ cần lọc những thứ đó từ đầu ra trước khi bạn thực hiện kết hợp của bạn.

Với các đường ống có tên, bạn sẽ kết thúc dự tính phát minh lại.

Các vấn đề liên quan