Python 如何在expect脚本中读取发送命令输出

Python 如何在expect脚本中读取发送命令输出,python,bash,expect,sys,Python,Bash,Expect,Sys,我有一个expect脚本,它将登录到远程服务器并执行python脚本。在python脚本中,我为某个条件设置了sys.exit(1),以便在满足该条件时停止执行。有没有办法知道python脚本是否停止执行或运行良好? (或者)是否有方法读取python脚本生成的输出(也就是说,我想读取send“python pythonscript.py arg1\r”的输出)。任何方法都可以。请提出建议 expectscript.exp #!/usr/bin/expect eval spawn ssh -o

我有一个expect脚本,它将登录到远程服务器并执行python脚本。在python脚本中,我为某个条件设置了
sys.exit(1)
,以便在满足该条件时停止执行。有没有办法知道python脚本是否停止执行或运行良好?
(或者)是否有方法读取python脚本生成的输出(也就是说,我想读取
send“python pythonscript.py arg1\r”
的输出)。任何方法都可以。请提出建议

expectscript.exp

#!/usr/bin/expect

eval spawn ssh -oStrictHostKeyChecking=no -oCheckHostIP=no user@******
expect "Password:"
send "password\r"
expect "$username$"
set prompt ":|#|\\\$"
set timeout -1
send "cd /Users/username/Documents/folder/\r"
send "python pythonscript.py arg1\r"
expect $prompt

作为命令运行

spawn ssh -c "python pythonscript.py arg1"
expect $prompt

尝试对可执行命令使用
spawn-c
,因为这将返回结果,发送它们将在执行后终止。

这是您需要
expect-re
在提示之前捕获输出的地方:

send "cd /Users/username/Documents/folder/\r"
expect $prompt
send "python pythonscript.py arg1\r"
expect -re "(.+)$prompt"
set pythonOutput $expect_out(1,string)
expect buffers在
expect\u out
数组中输出,数组键
1,string
(注意,没有空格)包含正则表达式模式的第一个捕获括号的内容

另外请注意,输出将包括python命令,并且行以
\r\n
结尾:因此您可以执行以下操作:

set outputLines [lrange [lmap line [split $pythonOutput \n] {regsub {\r$} $line ""] 1 end]

我想你可以在这里找到你想要的东西: