출처: http://egloos.zum.com/mcchae/v/11088170
지난번 TCL+Expect를 통하여 윈도우에서 CLI 자동화에 대하여 약간 살펴보았는데,
윈도우용 python expect 모듈인 pexpect가 제대로 동작하지 않는 것으로 알고 있었습니다만,
구글의 도움과 몇가지 시행착오를 통하여 드디어 성공하였습니다.
(그동안 한 두번 시도를 했다가 실패한 적도 있네요)
물론 리눅스와는 Child Process 관련 작업 및 Terminal IO 등의 문제 때문에 완벽한
호환은 아니더라도, 어느 정도(대부분의 필요한 정도는 가능합니다)
작업이 가능한 것은 확인하였습니다.
다음은 그 방법입니다.
우선 윈도우용 파이썬이 필요합니다.
다음 다운로드 사이트 에서,
python 2.7.6 Windows Installer 를 다운받습니다.
(64bit용 윈도우 7 OS에서도 잘 동작했습니다)
위와 같은 winpexpect 사이트에 들어가셔서,
상단 오른편의 Download를 누르고, Tags를 눌러 위와 같은 것의 winpexpect-1.5 zip을 다운받았습니다.
그 다음은, pywin32 사이트 에서,
위에서 Browse All Files를 눌러, 최신 Build (이 글을 작성하는 당시 Build 218이 최신 이었음)에서
64bit 윈도우에서도 python2.7 win32 버전을 설치했으므로, 상단에서도 pywin32-218.win32-py2.7.exe 를 다운받았습니다.
그 다음, winpexpect를 설치하기 위해서는 윈도우용 setuptools가 필요한데,
pypi/setuptools#windows 에 들어가셔서,
우측 상단에 ez_setup.py 를 다운받습니다.
이제 다음과 같이 설치가 가능합니다.
1) python-2.7.6.msi 로 파이썬 인터프리터를 설치합니다.
2) pywin32-218.win32-py2.7.exe 로 pywin32 모듈을 설치합니다.
3) 명령창에서 ez_setup.py 를 설치합니다.
4) winpexpect 설치
명령창에서 setup.py install 을 실행합니다.
이제 winpexpect를 이용하여 다음과 같은 파이썬 프로그램이 가능합니다.
import sys
from winpexpect import winspawn as spawn
with open('foo.out','w') as ofp:
child = spawn('cmd.exe', logfile=ofp)
child.expect ('>')
child.sendline ('plink toor@192.168.189.128')
child.expect ('password:.*')
child.sendline ('r')
child.expect ('~\$ ')
child.sendline ('cp /etc/hosts /tmp/hosts')
child.expect ('~\$ ')
child.sendline ('cat /tmp/hosts')
child.expect ('~\$ ')
child.sendline ('')
child.expect ('~\$ ')
child.sendline ('exit')
child.expect ('>')
child.sendline ('exit')
참고할 만한 사항입니다.
- spawn은 winspawn 인데 as로 aliasing 시켜서 사용하였습니다.
- spawn시에 logfile에 write file stream을 줌으로써 모든 상황이 해당 파일로 기록되게 할 수 있습니다.
- 바로 command out으로 출력을 할 경우 결과가 제대로 capture 되지 않아 그 위에 있는 cmd.exe를
우선 실행시키고 나서 필요 명령을 실행시켰습니다.
(Linux의 shell 을 실행하고 나서 하위 명령을 수행한 형태)
어느분께는 도움이 되셨기를...
'IT기술 관련 > 파이썬_루비 등 언어' 카테고리의 다른 글
pexpect 를 이용한 ssh 접속 자동화 (0) | 2016.09.12 |
---|---|
치명적 파이썬 (Violent Python) – 0×02 SSH 공격도구 (0) | 2016.09.12 |
[파이썬, Python] 하위 폴더를 포함한 파일 리스트 출력하기 예제 2. (0) | 2016.09.12 |
[파이썬, Python] py2exe로 실행파일 만들기 (0) | 2016.09.12 |
python - Reading Excel sheet with xlrd (xlrd를 이용한 파이썬 엑셀 파일 읽기) (0) | 2016.09.12 |