37

の使用もecho-e "\ 029"機能しません。ただし、ターミナルセッションで++を直接使用すると->機能しstrgますalt gr]

もっと具体的に質問する必要があります
。Telnet/SCPIを介してRFジェネレータ(AGILENT)を接続します。
ターミナルでこのマニュアルを実行し、セッションの最後にCTRL+ ALT GR+ ]for'^]'を押すと、scpiセッションが適切quitに閉じられ、入力してtelnetセッションを適切に閉じることができます。
RFジェネレータのディスプレイにエラーメッセージは表示されません。だからそうあるべきです。

スクリプトを介してこれを行うと、SCPIセッションはブレーク信号条件'^]'を認識しないようであり、スクリプト(telnetおよびscpi)の終了後に強制的に閉じられます。->メッセージ:「外部ホストによって切断されました」。残念ながら、RFジェネレータのディスプレイにエラーメッセージが表示されます->「無効なヘッダー」など。

正常に接続された後:192,168.10.66に接続されましたエスケープ文字は'^]'->これが問題のポイントです。ターミナルへの手動入力は正しく機能しますが、スクリプトは機能しません。

私のスクリプトは次のようになります。

function  getIDNMessage()  
{
    (      
        echo open $1 $2  
        sleep 1  
        echo "*IDN?"  
        sleep 1  
        echo –e "\029"         # or echo “^]” does not work well  
        sleep 1  
        echo "quit\r"  
        sleep 1  
    ) | telnet > scpi_telnet.log 2>&1
}

getIDNMessage 192.168.10.66 7777    
4

9 に答える 9

1

そうでなければなりません。^]サーバーの端末に印刷されているので、クライアント側には何の意味もありません。クライアントは、サーバーに送信される前にこのシンボルをキャッチする必要があります。もちろん、サーバーで実行されているプログラムでターミナルに書き込むことはできません。

したがって、他の方法でセッションを中断する必要があります。多くの方法があります。

  1. 実行中のプログラム内にいる場合は、プログラムを簡単に終了できます(exitシェルsys.exit()、Python、またはexit()他の多くの言語で)。
  2. プログラムフローを制御できない場合は、ターミナルの所有者であるプロセスを強制終了してターミナルを閉じることができます。プロセスを見つけて使用する必要がありますkill ...(の代わりにプロセスのPID ...)。
  3. クライアント側からクライアントを閉じたい場合は、同じ(kill ...)をクライアント側で行う必要があります。
于 2012-07-27T05:27:42.990 に答える