파이썬으로 cmd 결과를 추출해보자

윈도우 환경에서 파이썬으로 cmd 메시지를 추출하는 예제입니다.
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"
= 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"
= 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"
= 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 댓글