2016-04-06 48 views
0

另請參閱有關此主題的更具體的better question如何在Java中使用系統級別?

我剛剛discovered預計,基於TCL腳本語言自動化,除其他事項外,telnet連接:

[email protected]:~/NetBeansProjects/expect$ 
[email protected]:~/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: [email protected]        * 
------------------------------------------------------------------------------ 

Press Return to continue:usage: send [args] string 
    while executing 
"send – – 「\r」" 
    (file "example" line 9) 
[email protected]:~/NetBeansProjects/expect$ 

什麼樣的機制可用於任何掛接到期望與Java或成Java與期待?是的,有http://tcljava.sourceforge.net/以及其他一些,但他們似乎過時了。

如果在Java中有一個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 

然而,expect4j說,這是一個嘗試,ExpectJ自2010年以來一直沒有改變,並且Expect-for-Java在多年以來也沒有被觸及。

如果這些庫被使用和運作,我的道歉,但日期表明,他們不被維護。

我寧願單獨使用expect和Java,但讓它們進行交互。在兩者之間傳遞消息是否存在鉤子或機制?

---------------------------------------------- ------------- UPDATE ----------

**

Jacl的是用Java編寫的一個Tcl 8.x的解釋。您可以在Tcl中編寫您的 Java應用程序。

**

http://wiki.tcl.tk/1215

然而,庫尚未觸及的一段時間。我不太確定它的效果如何。我不知道它是否支持expect之類的東西,看起來好像各種expect的嘗試都沒有被維護。

Donal Fellows最可能的答案是沒有真正的解決方案,是正確的。然而,它可能可能只是可能使用此tcl庫發起一個telnet會話,調用真正的telnet,而不是與進程生成器,但這是非常初步的。

+0

在這裏定義「交互」?你準備從Java中做什麼**?期望什麼?你如何需要他們「互動」? –

+0

勾入,傳遞消息。我如何從期望的消息傳遞到Java程序,反之亦然?另請參閱http://stackoverflow.com/questions/15143619/how-to-implement-expect-interact-command-using-java對於不同解決方案的類似問題(ssh與telnet不同)。 – Thufir

+0

你想使用'expect'來自動化一個'telnet'連接?你想從'expect'控制一個Java應用程序?你想讓java看到'telnet'連接的內容?你想在* java中編寫'expect'-like邏輯* –

回答

1

我創建了另一個Java expect庫ExpectIt(未在維基百科中列出),它實現了交互循環。看看this example

+0

您是否必須使用'import org.apache.commons.net.telnet.TelnetClient'或是否可以使用系統telnet? – Thufir

+1

與所有其他Java庫一樣,該庫使用可以來自Telnet客戶端,套接字連接或任何其他流源的標準Java流。這裏是一個telnet的例子:https://github.com/Alexey1Gavrilov/ExpectIt/blob/master/expectit-core/src/test/java/net/sf/expectit/TelnetExample.java –

+0

這個問題變形了,離開了我,我把它縮小到你的庫,並問[這裏更具體的問題,關於Telnet客戶端的Java流](http://stackoverflow.com/questions/36865567/how-to-use-expectit-to -interact-與最Telnet的流)。 – Thufir

1

什麼機制可用於鉤預期的Java或預期的Java?

沒有。問題在於期望會執行一些非常複雜的低層次事情來管理僞終端,並使用JRE不公開的操作系統接口。 (如果你使用的是系統調試API的Windows系統,那就更加棘手了。)你必須用本機代碼去做一些令人討厭的事情。

簡單的路線是通過ProcessBuilder將預期作爲子流程運行。

1

據我所知,Swig將幫助你更好地連接這兩種語言。讓我知道如果我錯了

+0

http://www.swig.org/compat.html#SupportedLanguages列出Java和Ruby以及tcl。非常,非常有趣。 – Thufir

相關問題