2

Telnet ポートを接続するための Tcl スクリプトを実行しています。このスクリプトでは、すべての CMD 出力をログ ファイルに保存します。Tclスクリプトでこれを行う方法は? 以下のようにスクリプトします。

#!/usr/bin/expect -f
#!usr/bin/expect
package require Expect
spawn telnet $serverName $portNum
expect "TradeAggregator>"
send "Clients\r"
expect "Client:"
send "1\r"
expect "1-Client>"
send "Pollers\r"
expect "Client Pollers"
send "2\r"
send "n\r"
expect ">"
set passwordOption $expect_out(buffer)
set searchString "Not confirmed" 
if {[string match *$searchString* $passwordOption]} { 
puts "match found" }\ 
else { 
puts "match not found" 
xmlPasswordChange $polName 
}

すべての puts 出力と xmlPasswordChange プロシージャ出力がログ ファイルに出力されません。私が間違っているところを指摘してください。

事前にご協力いただきありがとうございます。

4

2 に答える 2

12

出力の保存を開始する場所にコマンドを挿入しlog_fileます。たとえば、すべての出力を保存する場合は、先頭に貼り付けます。

#!/usr/bin/expect -f

log_file myfile.log ;# <<< === append output to a file

package require Expect
spawn telnet $serverName $portNum
expect "TradeAggregator>"
send "Clients\r"
expect "Client:"
send "1\r"
expect "1-Client>"
send "Pollers\r"
expect "Client Pollers"
send "2\r"

デフォルトでlog_fileは、ファイルが存在する場合は追加するか、新しいファイルを作成します。毎回新しいログを開始する場合は、次のようにします。

log_file -noappend myfile.log

アップデート

puts出力がログファイルではなくコンソールに送られる理由に関する質問ごとに。私が理解している方法はputs、コンソールに行くことです。ログ ファイル (コマンドで開かれたファイルを開く) にログを記録する場合は、代わりに次log_fileのコマンドを使用します。send_log

log_file -noappend myfile.log
send_log "This line goes into the log file"
send_user "This line goes into both the log file and console\n"
puts "This line goes to the console"

上記の例では、 と のように機能する別のコマンドが導入されましsend_userた。には改行が含まれていないため、呼び出し元は改行を含める必要があることに注意してください。putssend_logsend_user

于 2013-04-12T08:03:17.143 に答える
0

また、孤立した [open $file_name w] コマンドで独自のログ ファイルを作成し、そのファイルにすべてを書き込み続けることもできます。

于 2015-05-29T07:59:41.070 に答える