我正在使用fabric,这是一个仅在Python2。*中工作的部署工具,用于将我的博客部署到远程服务器。
但是我的博客是用Python 3.5编写的,所以我试图使用expect脚本和pyenv工具自动完成部署工作:
#!/usr/bin/expect
set timeout 10
spawn pyenv global system # changes python to 2.* version
spawn fab build # gets files zipped
spawn fab deploy
expect "private key:"
send "x\r"
expect "Login password for 'myblog': "
send "*******\r"
expect eof
spawn pyenv global 3.5.1 # changes back
然后我发现只有spawn pyenv global system
和spawn fab deploy
部分工作。
这是因为spawn fab build
部分不需要任何输入或反馈吗?但如果是这样,它无法解释为什么第一个语句spawn pyenv global system
起作用。另外,奇怪的是,最后一个陈述失败了。
顺便说一下,当我在命令行中分别运行这四个语句时,这很好。
答案 0 :(得分:0)
我尝试在每个语句后添加expect eof
并且它有效:
#!/usr/bin/expect
set timeout 10
spawn pyenv global system
expect eof
spawn fab build
expect eof
spawn fab deploy
expect "key:"
send "x\r"
expect "password"
send "*******\r"
expect eof
spawn pyenv global 3.5.1
expect eof
也许当您想要执行不需要ls -a
之类的输入的命令时,可以在其后添加expect eof