2017-11-23 20 views
0

1. expect ('OPR>', 'show alef-users')를 실행 한 후에 무한대로 이동하면 가 계속 실행됩니다.패브릭 파이썬에서 대화 형 셸을 다루는 방법

from fabric.api import * 
from fabric.context_managers import settings 
from ilogue.fexpect import expect, expecting, run 

prompts = [] 
prompts += expect('Username:','kirti') 
prompts += expect('Password:','kirti') 
prompts += expect('OPR>','show users') 
prompts +=expect('OPR>','exit') 
env.password = "[email protected]" 
with cd('/home/kirti/opr'): 
with expecting(prompts): 
run('./kirti', combine_stderr=False) 
+0

현재 코드는 무엇입니까? – Neil

+0

이 코드를 실행할 때 무한대로 이동하면 다음에 기대하지 않는 'OPR>', 'exit') –

+0

('OPR>', 'show opr-users) 'edit' 링크를 통해 질문의 본문에 코드를 추가해야합니다. 이 기형의 경우 머리 나 이야기를하기가 어렵습니다. – Neil

답변

1

직물> = 1.9은 하나의 with 절에, 동시에 여러 메시지를 처리 ​​할 수 ​​있습니다 : 당신은 그냥 직물의 settings 기능을 사용하고 딕셔너리로 ​​먹이를 가지고; 열쇠가 질문이되며, 값이 답이 될 것입니다.

with settings(prompts={'Username:','admin', 
         'Password:','admin', 
         'OPR>','show alef-users', 
         'OPR>','exit'}): 
    run('./go_opr_cli', combine_stderr=False) 

내 대답은 직물의 공식 문서의 that section에서 영감 : 같이 당신의 경우, 볼 것이다. 그것은 나를 위해 잘 작동하지만, dict의 키를 작성할 때 명령 행에서 질문의 마지막 문자와 커서 사이의 공백 수를 고려해야합니다. 그렇지 않으면 실패합니다.

예 : 마지막 프롬프트는 'OPR>'입니다. 일반 Linux CLI에서 'OPR>'과 커서 사이에 하나의 공백이 있으면 'OPR>'이어야합니다.