<개인공부> - IT/[Python]

Subprocess 모듈이용하기

Aggies '19 2021. 4. 15. 04:44
반응형

회사 업무를 진행하면서 업무에 필요한 다양한 스크립트를 작성한다. IPAM system에서도 조회가 가능한 정보이지만 나는 Python 스크립트에서 shell을 실행하여 원하는 정보를 처리하는 방법을 택했다.

 

nslookup IP address (e.g - nslookup 10.0.0.1) 형태의 명령어를 통해서 조회하는 IP와 연계된 DNS 레코드를 추출했다.

 

검색을 통해서 가장 처음 알게된 방법은 os.system('nslookup ' + '10.0.0.1')

하지만 위와같이 코드를 수행하게 되면 해당 프로세스를 실행하여 출력해줄 뿐 output을 capture 할 수 없다.

 

이 문제를 해결하려면 subprocess를 이용하면 가능하다.

import subprocess
import openpyxl

fileName = r"P:\Cutover_Prep1.xlsx"

def loadExcelFile(fileName):

    wb = openpyxl.load_workbook(fileName)
    ws = wb.active
    ipList = list()

    for i in range(2, ws.max_row + 1):
        ipList.append(ws['G' + str(i)].value)

    print('--- Data successfully loaded')
    return ipList

def saveExcelFile(dnsList):

    wb = openpyxl.load_workbook(fileName)
    ws = wb.active
    cellNumber = 2

    for elem in dnsList:
        
        ws['J' + str(cellNumber)] = elem
        cellNumber += 1
    
    wb.save(fileName)
    wb.close()
    print('--- Data successfully saved')

ipList = loadExcelFile(fileName)
dnsList = list()
for elem in ipList:
    
    fd_popen = subprocess.Popen(f'nslookup {elem}', stdout=subprocess.PIPE).stdout
    dnsList.append(fd_popen.read().strip().decode("utf-8").split("Name:")[1].split("Address:")[0].strip())
    fd_popen.close()

saveExcelFile(dnsList)
반응형