pexpect를 사용하여 원격으로 gdb로 작업하려고합니다. 이것은 내 현재 코드 :이전 출력에서 문자열을 일치시킬 때 pexpect python 모듈의 예상 결과가
child = pexpect.spawn("ssh [email protected] \"gdb\"")
child.logfile = sys.stdout
child.expect("password:")
child.sendline("xxxx")
child.expect("(gdb)")
child.sendline("attach 9813")
child.expect("(gdb)")
child.sendline("info registers")
child.expect("(gdb)")
child.sendcontrol('c')
그리고 이것은 내 콘솔 출력의 일부입니다
(...)
GNU gdb (GDB) 7.4.1-debian
(...)
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
(gdb) attach 9813
info registers
[email protected]:~$
이 같은 뭔가 기대 동안 :
(...)
GNU gdb (GDB) 7.4.1-debian
(...)
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
(gdb) attach 9813
<Attaching...>
(gdb) info registers
<Registers info displayed...>
(gdb) <Ctrl+C is done>
[email protected]:~$
그래서, 문제를 처음으로 (gdb)
과 일치하고 첫 번째 명령 attach 9813
을 보내면 pexpect가 두 번째가 아닌 것으로 보입니다. (gdb)
새 명령을 보낼 회선 info registers
. 첫 번째 (gdb)
을 다시보고 일치시키고 두 번째 명령 을 보내지 않고 첫 번째 명령이 실행될 때까지 (필요한 프로세스에 연결될 때까지)을 기다리지 않고 기다립니다.
어떻게하면 다음과 같은 결과 만 분석 할 수 있습니까? 이전 출력을 두 번 일치시키지 않고? 내가 알고있는 것처럼, 여기 pexpect이 필요하기 ftp>
반응을 관리하고 연속적으로 명령을 전송
child = pexpect.spawn('ftp ftp.openbsd.org')
child.expect('(?i)name .*: ')
child.sendline('anonymous')
child.expect('(?i)password')
child.sendline('[email protected]')
child.expect('ftp> ')
child.sendline('cd /pub/OpenBSD/3.7/packages/i386')
child.expect('ftp> ')
child.sendline('bin')
child.expect('ftp> ')
child.sendline('prompt')
: 나는 FTP 서버에 대해이 같은 샘플을 보았다. 내 코드가 비슷해 보인다.
또한 플러시 표준 출력을 시도했지만 작동하지 않았습니다.
'expect()'는 실제로 그 인수를 간단한 문자열이 아닌 정규 표현식으로 취급하므로, 처음으로 프롬프트를 검색하는 것은'GNU gdb (GDB) 7.4.1-debian'에서 아마도 일치 할 것입니다. 버그보고 URL에서 두 번째로 또는 생략 된 부분의 내용 간단한 문자열 매칭을하기 위해'expect_exact()'를 사용해보십시오. –
답장을 보내 주셔서 감사합니다. 'expect_exact()'시도가 도움이되지 않았습니다. 하지만 두 번째 cmd 인 info registers에 대해 expect ("(\ (gdb \). *) {2}")를 시도했지만, 불행히도 2 {'gdb} '와 일치합니다. 하지만 그러한 해결책은 최후의 수단입니다. searchwindowsize와 관련이 있는지 알고 있습니까? 나는 '0, 1, 2'를 할당하려고 시도했지만, 도움이되지 않습니다. 그리고 그 메커니즘을 얻지 못하는 것 같습니다. – primavera314
필자는'expect()'를'expect_exact()'로 변경했지만, 더 공평하게 보입니다 (위에서 보여준 정규식 제외). – primavera314