如何使用expect将stdout从程序中连续重定向到生成的进程?

时间:2017-05-18 22:31:34

标签: bash tcl expect

需要打开telnet,发送一些命令,然后从pocketsphinx发送stdout。

目前预计将等到程序完成后再将所有内容输出到telnet进程。 我需要pocketphix来持续提供产生的telnet进程。

这是我到目前为止所做的:

#!/usr/bin/expect -d
set send_human {.1 .3 1 .05 2}
spawn telnet 192.168.1.104 23
expect “*”
send "\x01"; send "2\r"
expect “:”
send -h "hello world\r"
send -h "goodbye world\r"
send -h "Test Test Test\r"
send -- [exec pocketsphinx_continuous -infile speech.wav 2> /dev/null ]\n

1 个答案:

答案 0 :(得分:1)

您可以使用expect命令interact将两个衍生进程连接在一起。

  

默认情况下,interact期望用户编写stdin并读取Expect进程的stdout   本身。 -u标志(用于“user”)使交互查找用户作为其参数命名的进程   (必须是衍生的ID)。

     

这允许在不使用显式循环的情况下将两个不相关的进程连接在一起。为了帮助   调试,Expect诊断总是转到stderr(或某些日志和调试信息的stdout)。   出于同样的原因,interpreter命令将从stdin交互式读取。

例如

set send_human {.1 .3 1 .05 2}
spawn telnet 192.168.1.104 23
expect “*”
send "\x01"; send "2\r"
expect “:”
send -h "hello world\r"
send -h "goodbye world\r"
send -h "Test Test Test\r"

set sid_telnet $spawn_id
spawn pocketsphinx_continuous -infile speech.wav 2> /dev/null 

interact -u $sid_telnet