2009-09-24 7 views
7

Odziedziczyłem 20-letnią aplikację do obsługi interaktywnych linii poleceń, która nie jest już obsługiwana przez jej dostawcę. Musimy zautomatyzować niektóre zadania w tej aplikacji.Jak można sterować interaktywną aplikacją systemu Unix programowo za pomocą języka Perl?

Najbardziej kłopotliwym z nich jest tworzenie tysięcy nowych rekordów z nieco innymi parametrami (np. Różne identyfikatory, różne nazwy). Zapisy muszą być tworzone kolejno, po jednym na raz, co zajęłoby wiele miesięcy (a zatem i dolarów), aby wykonać je ręcznie. W większości przypadków tworzenie rekordu ma bardzo przewidywalny wzorzec wprowadzania komend, odczytywania odpowiedzi, wprowadzania dalszych poleceń itp. Jednak niektóre operacje tworzenia rekordów spowodują wystąpienie błędów ("rekord z tym identyfikatorem już istnieje"), które wymagają inny zestaw poleceń, które wyjdą z wdziękiem.

widzę kilka różnych sposobów, aby to zrobić:

  • Nazwane potoki. Napisz skrypt Perla, który uruchamia aplikację docelową, STDIN i STDOUT są ustawione na nazwane potoki, a następnie wysyłają docelową aplikację sekwencję poleceń, aby utworzyć rekord z wymaganymi parametrami, a następnie instruuje docelową aplikację, aby zamknęła i zamknęła aplikację. Następnie uruchamiamy skrypt tyle razy, ile jest to wymagane, z różnymi parametrami.

  • Aplikacja. Znajdź inne narzędzie Unix, które może być używane do pisania skryptów interaktywnych. Jedyne, co udało mi się znaleźć, to: expect, ale to nie wydaje się być utrzymywane; i czat, o którym wspominam od wieków, i który wydaje się robić mniej więcej to, czego chcę, ale wydaje się, że tylko do kontrolowania modemów.

Jeszcze jedna potencjalna komplikacja: Myślę, że aplikacja docelowa została napisana dla terminala VT100 i wykorzystuje jakąś sekwencje aby robić takie rzeczy jak zapewniają podświetlenie.

Moje pytanie brzmi, jakie podejście należy podjąć? Jeden z nich, czy coś zupełnie innego? Bardzo podoba mi się pomysł użycia nazwanych potoków, a następnie posiadanie skryptu Perla, który otwiera FIFO i czyta i zapisuje zgodnie z wymaganiami, ponieważ zapewnia dużą elastyczność, ale z tego, co przeczytałem, wydaje się, że istnieje wiele potencjalnych problemów, jeśli Idę tą ścieżką.

Z góry dziękuję.

+1

oczekuje się teraz na sourceforge http://sourceforge.net/projects/expect/ – Mark

+0

Aktualizacja: Mam zadatki na rozwiązanie za pomocą Expect.pm. Dziękujemy wszystkim, którzy odpowiedzieli. Mogę przeprowadzić SSH na serwerze testowym, uruchomić aplikację i rozpocząć z nią interakcję. Wygląda na to, że kody kontrolne VT100 są dość proste. Obecnie nie mam konta, ale nauczyłem się kilku nazw użytkowników, więc myślę, że moim pierwszym prawdziwym testem automatyzacji będzie atak słownikowy na konto demonstratora ... –

Odpowiedz

12

Zdecydowanie bym się trzymał Perla, by zyskać dodatkową elastyczność, jak sugerował chaos. Czy wiesz o Expect perl module? Jest o wiele ładniejszy niż podany system rur.

Uwaga: w przypadku nazwanych potoków nie można wymusić, aby dane wyjściowe pochodzące z poprzedniej aplikacji były niebuforowane, co może być denerwujące. I think Expect.pm używa pseudo-ttys do obejścia tego problemu, ale nie jestem pewien. Aby uzyskać więcej informacji, zobacz dyskusję pod numerem perlipc w sekcji "Bidirectional Communication with Another Process".

+0

Nie wiedziałem o module Expect Perl, więc daję mu wir. Wygląda obiecująco, dokumentacja jest jednak trochę lekka - prawdopodobnie muszę przeczytać na podstawie pierwotnych oczekiwań. –

4

expect jest o wiele bardziej stabilny, niż przypuszczasz, ale gdybym był tobą, nadal korzystałbym z opcji Perla, chcąc mieć pełny i znajomy język programowania do zarządzania procesem i posiadania przekonanie, że pojawią się jakiekolwiek dziwne problemy, będą sposoby na ich rozwiązanie.

4

Spodziewaj się, używając Tcl lub Perl implementation, byłaby to moja pierwsza próba. Jeśli widzisz dziwne sekwencje na wyjściu, ponieważ robisz dziwne rzeczy na terminalu, po prostu odfiltruj je z wyjścia przed dopasowaniem.

Z nazwanymi rurami, w końcu i tak na nowo odkryjesz Oczekiwania.

Powiązane problemy