log_file 命令在 Expect 脚本中不能记录命令输出

3

我正在运行一个调试命令,将命令的输出记录到文件中。我尝试了log_file命令,但它不会记录输出。我的代码如下:

log_file -a gdb.txt 
send "~/debugulator.sh $file mns20\r"
log_user 0
expect -re {DSP.*0x[0-9][0-9][0-9][0-9]}
log_user 1
send_log $expect_out(0,string)
log_file 

但是当我打开gdb.txt时,里面什么也没有。有人能告诉我我到底做错了什么。我使用的expect版本是5.26.0。

更新 这是我尝试的另一段代码...它仍然无法工作...我已经添加了exp_internal 1命令后发布了输出结果...代码如下:

spawn telnet 10.1.1.2
expect "Login:"
send "xyz\r"
expect "Password:"
send "Nxyz1\r"
expect "xyz:/home/xyz>"
send "cd /sonus/support/GSX-[lindex $argv 0]\r"
log_file myfile.log
send_log "this is in the log file \n"
log_file
interact

输出 启动 telnet 10.1.1.2 父进程: 等待同步字节 父进程: 告诉子进程可以开始 父进程: 现在与子进程不同步 spawn: 返回值为 {17179}

`expect: does "" (spawn_id exp6) match glob pattern "Login:"? no`
`Trying 10.1.1.2...`

`expect: does "Trying 10.1.1.2...\r\n" (spawn_id exp6) match glob pattern "Login:"? no`
`Connected to 10.1.1.2.`
`Escape character is '^]'.`

`expect: does "Trying 10.1.1.2...\r\nConnected to 10.1.1.2.\r\nEscape     character is '^]'.\r\n" (spawn_id exp6) match glob pattern "Login:"? no`


`SunOS 5.9`


`expect: does "Trying 10.1.1.2...\r\nConnected to 10.1.1.2.\r\nEscape character is '^]'.\r\n\r\n\r\nSunOS 5.9\r\n\r\r\n\r" (spawn_id exp6) match glob pattern "Login:"? no
login: xyz\r`
`expect: does "Trying 10.1.1.2...\r\nConnected to 10.1.1.2.\r\nEscape character is '^]'.\r\n\r\n\r\nSunOS 5.9\r\n\r\r\n\rlogin: " (spawn_id exp6) match glob pattern "Login:"? no`
`expect: timed out`
`send: sending "xyz\r" to { exp6 }`

`expect: does "Trying 10.1.1.2...\r\nConnected to 10.1.1.2.\r\nEscape character is '^]'.\r\n\r\n\r\nSunOS 5.9\r\n\r\r\n\rlogin: " (spawn_id exp6) match glob pattern "Password:"? no

xyz`

 `expect: does "Trying 10.1.1.2...\r\nConnected to 10.1.1.2.\r\nEscape character is '^]'.\r\n\r\n\r\nSunOS 5.9\r\n\r\r\n\rlogin: xyz\r\n" (spawn_id exp6) match glob pattern "Password:"? no`
 `Password:` 
 `expect: does "Trying 10.1.1.2...\r\nConnected to 10.1.1.2.\r\nEscape character is '^]'.\r\n\r\n\r\nSunOS 5.9\r\n\r\r\n\rlogin: xyz\r\nPassword: " (spawn_id exp6) match glob pattern "Password:"? yes`
 `expect: set expect_out(0,string) "Password:"`
 `expect: set expect_out(spawn_id) "exp6"`
 `expect: set expect_out(buffer) "Trying 10.1.1.2...\r\nConnected to 10.1.1.2.\r\nEscape character is '^]'.\r\n\r\n\r\nSunOS 5.9\r\n\r\r\n\rlogin: xyz\r\nPassword:"`
 `send: sending "Nxyz1\r" to { exp6 }`

 `expect: does " " (spawn_id exp6) match glob pattern "xyz:/home/xyz>"? no`


 `expect: does " \r\n" (spawn_id exp6) match glob pattern "xyz:/home/xyz>"? no`
 `Last login: Tue May 31 05:10:20 from 10.253.6.98
 /home/xyz/.aliases: No such file or directory.`
 `[1]slate:xyz:/home/xyz>` 
 `expect: does " \r\nLast login: Tue May 31 05:10:20 from 10.253.6.98\r\n/home/xyz/.aliases: No such file or directory.\r\n\u001b]0;[slate:]/home/xyz\u0007[1]slate:\u001b[1mxyz\u001b[m:/home/xyz> " (spawn_id exp6) `match      glob pattern "xyz:/home/xyz>"? no
 `expect: timed out`
 `send: sending "cd /sonus/support/GSX-5\r" to { exp6 }`
 `tty_raw_noecho: was raw = 0  echo = 1`
 `spawn id exp6 sent <c>`
 `cspawn id exp6 sent <d /sonus/support/GSX-5\r\r\n\u001b]0;[slate:]/sonus/support/GSX-5\u0007[2]slate:\u001b[1msdwarampudi\u001b[m:/sonus/support    /GSX-5> >`
 `/sonus/support/GSX-5`
`[2]slate:xyz:/sonus/support/GSX-5>` 

添加 exp_internal 1 并分享输出结果。 - Dinesh
当我尝试了像这样简单的东西... log_file myfile.log send_log "this is in the log file \n" log_file 甚至这都没有被记录下来... - john
应该可以。你的 expect 版本是什么?Windows 还是 Linux? - Dinesh
期望的版本是5.26.0,这是一台Ubuntu电脑... - john
请检查上面的更新 @Dinesh - john
显示剩余2条评论
1个回答

0

你的提示中有颜色代码导致模式匹配失败:

expect: does "...slate:\u001b[1mxyz\u001b[m:/home/xyz> " (spawn_id exp6) `match      glob pattern "xyz:/home/xyz>"? no
# .................................^^^^^^^^........................................................^^^^^^^^^^^^^^

经常当我使用ssh连接到远程主机时,第一件事情就是(假设远程shell是sh/ksh/bash),将提示符设置为易于匹配的内容:
spawn ssh remotehost
# ... password stuff
# now, set the prompt
send "PS1='>'\r"
expect -re {>$}    # use this to match the prompt from now on

其实,你只需要简化你的提示匹配:你的提示以>和一个空格结尾,所以:
expect -re {> $} 

好的,很酷..我做到了..但是日志文件呢?它与日志记录无关,对吧?!? - john

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接