cmd 메시지를 출력하기 위해 subprocess 모듈을 설치합니다.
1 | py –m pip install subprocess | cs |
아래의 간단한 예제로 subprocess.getstatusoutput 함수가 어떤식으로 출력되는지 테스트해보겠습니다.
first.py
1 2 3 4 5 6 7 8 | import os import subprocess cmd = "ipconfig" f = open('new.txt','w') sysMsg = subprocess.getstatusoutput(cmd) f.write(sysMsg[1]) f.close() | cs |
실행결과
저는 여기서 IP주소만 추출해보겠습니다.
정규식을 이용해서 코드를 수정해봅시다.
정규식을 사용하기 위해 re모듈을 import 해줍니다.
seconde.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | import os import subprocess import re def extractIp(ip): result = re.findall( r'[0-9]+(?:\.[0-9]+){3}', ip ) #IP 추출 정규식 return result cmd = "ipconfig" f = open('new.txt','w') sysMsg = subprocess.getstatusoutput(cmd) f.write(sysMsg[1]) f.close() ip_list = [] f2 = open('new.txt', 'r') line = [] while True : line = f2.readline() #한줄씩 읽습니다. getIp = extractIp(line) #정규식으로 ip만 뽑아냅니다. ip_list.append(getIp) # 뽑아낸 IP를 리스트형태로 저장합니다. if("" == line) : break f3 = open('new2.txt','w') f3.write(str(ip_list)) f2.close() f3.close() print(ip_list) print("COMPLTE") | cs |
실행결과
대괄호가 보여서 list에 이쁘게 담기지 않습니다.
문자열을 가공해주면 완성입니다.
result.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | import os import subprocess import re def extractIp(ip): result = re.findall( r'[0-9]+(?:\.[0-9]+){3}', ip ) #IP 추출 정규식 return str(result).replace('[]','').replace('[', '').replace(']', '').replace("'",'')#추출시 지저분한것들을 없앤다. cmd = "ipconfig" f = open('new.txt','w') sysMsg = subprocess.getstatusoutput(cmd) f.write(sysMsg[1]) f.close() ip_list = [] f2 = open('new.txt', 'r') line = [] while True : line = f2.readline() #한줄씩 읽습니다. getIp = extractIp(line) #정규식으로 ip만 뽑아냅니다. if(getIp != ''): ip_list.append(getIp) # 뽑아낸 IP를 리스트형태로 저장합니다. if("" == line) : break f3 = open('new2.txt','w') f3.write(str(ip_list)) f2.close() f3.close() print(ip_list) print(ip_list[0]) print(ip_list[1]) print(ip_list[2]) print(ip_list[3]) print("COMPLTE") | cs |
실행결과
list형태로 저장되기때문에 ip_list[0], ip_list[1] 등 원하는 데이터에 접근이 가능합니다.
0 댓글