ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Subprocess 모듈이용하기
    <개인공부> - IT/[Python] 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)
    반응형

    '<개인공부> - IT > [Python]' 카테고리의 다른 글

    Python (pass, continue, and break)  (0) 2021.07.20
    Day 9. PyQt5 (Dialogs)  (0) 2021.03.30
    Day 8. PyQt5 (Actions, Toolbars, Menus)  (0) 2021.03.20
    Day 7. PyQt5 (Layouts)  (0) 2021.03.19
    Day 6. PyQt5 (QSpinBox, QSlider, QDial)  (0) 2021.03.18
Designed by Tistory.