" \ R"在Cygwin的TCL Expect中被忽略

时间:2016-04-21 06:38:54

标签: cygwin tcl expect

我有一个tcl脚本通过Cygwin中的Expect访问串口。我注意到\r被忽略导致串口控制台没有回复。

spawn ./plink.exe -serial COM$priuart -sercfg 115200,8,n,1,N
set id $spawn_id
set timeout 30
log_user 1 
exp_send -i $id  "\r"
expect -i $id -re ".*>" {exp_send -i $id  "sys rev\r"}
expect -i $id -re ".*>" {set temp $expect_out(buffer)

请注意,通过添加-o igncr,Cygwin解决了类似的问题。但是,调用tcl脚本仍然存在问题。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

exp_send模拟按下 Return 键所需的确切内容可能会有所不同; \r(回车)对于经典的Unix系统来说是正确的,但在你的情况下可能不正确,特别是因为你最终谈到串行线(它可以添加自己的复杂层) )。您完全有可能需要发送\n(换行符)或\r\n(回车符/换行符序列)。最简单的方法是让你进行实验,看看哪些方法有效。

在更改内容时,不要忘记在所有使用它的地方进行更改。

还要注意,Tcl可以直接与串行线通信,并且spawn告诉使用已经打开的通道。这对你来说可能更好......

# The name *is* magical, especially for larger port numbers
set channel [open \\\\.\\com$priuart r+]
fconfigure -mode 115200,n,8,1 -buffering none
spawn -open $channel