Как подключиться к системному уровню ожидать с Java?

Смотрите также лучший вопрос по этой теме.

Я только что обнаружил ожидаемый, основанный на tcl язык сценариев для автоматизации, среди прочего, соединений telnet:

thufir@mordor:~/NetBeansProjects/expect$ 
thufir@mordor:~/NetBeansProjects/expect$ expect example rainmaker.wunderground.com 3000
spawn telnet rainmaker.wunderground.com 3000
Trying 38.102.137.140...
Connected to rainmaker.wunderground.com.
Escape character is '^]'.
------------------------------------------------------------------------------
*               Welcome to THE WEATHER UNDERGROUND telnet service!            *
------------------------------------------------------------------------------
*                                                                            *
*   National Weather Service information provided by Alden Electronics, Inc. *
*    and updated each minute as reports come in over our data feed.          *
*                                                                            *
*   **Note: If you cannot get past this opening screen, you must use a       *
*   different version of the "telnet" program--some of the ones for IBM      *
*   compatible PC's have a bug that prevents proper connection.              *
*                                                                            *
*           comments: jmasters@wunderground.com                              *
------------------------------------------------------------------------------

Press Return to continue:usage: send [args] string
    while executing
"send – – “\r”"
    (file "example" line 9)
thufir@mordor:~/NetBeansProjects/expect$ 

Какие механизмы можно использовать в Java для ожидания или в Java с ожиданием? Да, есть http://tcljava.sourceforge.net/ а также несколько других, но они кажутся устаревшими.

Если есть реализация tcl в Java, и почему бы и нет, это будет работать, я уверен. Однако из-за отсутствия обновлений на веб-страницах я делаю вывод, что ничего не было полностью реализовано...

Википедия говорит:

Джава

expect4j — an attempt at a Java clone of the original Expect
ExpectJ — a Java implementation of the Unix expect utility
Expect-for-Java — pure Java implementation of the Expect tool

Тем не менее, wait4j говорит, что это попытка, ExpectJ не менялся с 2010 года, а Expect-for-Java также не затрагивался годами.

Если эти библиотеки используются и функционируют, мои извинения, но даты указывают, что они не поддерживаются.

Я предпочел бы использовать ожидаемо и Java отдельно, но так, чтобы они взаимодействовали. Есть ли ловушка или механизм для передачи сообщений между ними?

-------------------------------------------------- ---------ОБНОВИТЬ----------

**

Jacl - интерпретатор Tcl 8.x, написанный на Java. Вы можете создавать сценарии для ваших Java-приложений на Tcl.

**

http://wiki.tcl.tk/1215

Тем не менее, библиотека не была затронута в течение некоторого времени. Я не совсем уверен, насколько хорошо это работает. Я не знаю, поддерживает ли он что-нибудь вроде expect или нет, это выглядит как различные expect попытки не поддерживаются.

Скорее всего, ответ Donal Fellows, что нет реального решения, является правильным. Однако может быть просто возможно использовать эту библиотеку tcl для инициирования сеанса telnet, вызывая настоящий telnet, а не с компоновщиком процессов, но это очень условно.

3 ответа

Решение

Я создал еще одну библиотеку ожиданий Java ExpectIt (не указанную в Википедии), которая реализует цикл взаимодействия. Посмотрите на этот пример.

Как с моими знаниями Swig поможет вам лучше в соединении двух языков. Дайте мне знать, если я ошибся

Какие механизмы можно использовать в Java для ожидания или в Java с ожиданием?

Ни один на самом деле. Проблема заключается в том, что для управления псевдо-терминалами ожидаются некоторые действительно сложные низкоуровневые вещи, в которых используются интерфейсы ОС, которые JRE не предоставляет. (Это еще сложнее, если вы работаете в Windows, где используется системный API-интерфейс для отладки.) Вам придется заняться неприятными вещами с нативным кодом.

Простой путь - запустить ожидаемый в качестве подпроцесса через ProcessBuilder,

Другие вопросы по тегам