2016-12-13 122 views
1

給定一個交互式的Python腳本Expect腳本與一個Python的命令行應用程序

#!/usr/bin/python 
import sys 

name = raw_input("Please enter your name: ") 
age = raw_input("Please enter your age: ") 
print("Happy %s.th birthday %s!" % (age, name)) 

while 1: 
    r = raw_input("q for quit: ") 
    if r == "q": 
     sys.exit() 

我想從與它交互的expect腳本

#!/usr/bin/expect -f 

set timeout 3 
puts "example to interact" 
spawn python app.py 

expect { 
    "name: " { send "jani\r"; } 
    "age: " { send "12\r"; } 
    "quit: " { send "q\r"; } 
} 

puts "bye" 

的期望腳本似乎沒有互動交互與Python應用程序剛剛運行。

是python的問題還是與期望的代碼?

回答

0

你需要的是3種不同的期望呼叫:

#!/usr/bin/expect -f 

set timeout 3 
puts "example to interact" 
spawn python app.py 

expect "name: " { send "jani\r" } 
expect "age: " { send "12\r" } 
expect "quit: " { send "q\r" } 

原因是expect命令並不像一個循環工作。一旦它處理了輸入/輸出,它就會繼續。

0

爲什麼你需要預期?

python app.py <<END_INPUT 
jani 
12 
q 
END_INPUT 
+1

我真正的問題是關於一個ssh會話,其中登錄包括很多額外的行,也有機器的具體信息。我必須在90臺服務器上運行一些'yum remove cvs'。這只是我在Expect上的學習曲線。 – jshepherd

+0

該要求與您的問題無關。你研究了[標籤:期待]有關自動化ssh的問題嗎?已經有幾十個類似的問題。 –

相關問題