subprocess.Popen(Sub Process) 함수를 사용하게 된 것은 OS의 기본기능이 생각보다 강력하다는 경험을 하게 된 뒤 사용하는 것 같습니다.

다만 요즘 트렌드는 기본 기능을 컴팩트하게 하고 추가 패키지를 많이 같고 있는 것 같습니다. OS 기본기능과 CMD, Shell 기능을 사용하기 위해한 함수 입니다. (Python Document)

사실 Sub Process 는 C언어를 사용할때는 HW나 OS의 종류에 따라 코드가 변경되야 하는 경우가 있어서 처음 C언어에서 Popen(pipe-open) 의 개념을 익히면서 사용했던 기억이 있습니다.

subprocess.Popen은 Python에서 외부 프로그램이나 명령어를 실행할 때 사용하는 모듈입니다. Popen은 실행 중인 프로세스와 통신하거나 데이터를 주고받을 수 있도록 강력한 기능을 제공합니다.

동작 프로세스

  • 외부 명령 실행: 쉘 명령어나 프로그램을 실행
  • 프로세스와 통신: 표준 입력(stdin), 출력(stdout), 에러(stderr) 스트림을 사용해 실행된 프로세스와 데이터를 주고 받음
  • 비동기 실행: 프로세스를 비동기적으로 실행하여 다른 작업과 병렬로 처리

Sub Process Code

import subprocess, os

def subprocess_open(command):
    popen = subprocess.Popen(command, stdout=subprocess.PIPE,
            stderr=subprocess.PIPE, shell=True, encoding='euc-kr')
    (stdoutdata, stderrdata) = popen.communicate()
    return stdoutdata, stderrdata

if __name__ == "__main__":
    if os.name == 'Windows':
        stdout, stderr = subprocess_open('dir')
    elif os.name == 'posix':
        stdout, stderr = subprocess_open('ls')
    else:
        print("OS is " + os.name)
        exit()
    print("[stdout]", stdout)
    print("[stderr]", stderr)

시스템 Shell 에서 실행할 수 있는 명령어을 알아보겠습니다. 실행 가능한 커맨드의 종류는 사용하는 운영 체제(Windows, Linux, macOS)에 따라 다르죠.

  • 공통 명령어 (Windows, Linux, macOS)
    • echo: 텍스트 출력
    • ping: 네트워크 상태 확인
  • Linux/Mac 명령어
    • ls: 디렉토리 목록 보기
    • cat: 파일 내용 보기
    • grep: 특정 문자열 검색
    • curl: URL 요청
  • Windows 명령어
    • dir: 디렉토리 목록 보기
    • tasklist: 실행 중인 프로세스 확인
    • type: 파일 내용 출력

이외에 cmd 타입으로 프로그램을 만들어 연계해서 사용하기 도 편합니다. 예를 들면 메인 프로그램에서 간단한 조작이 필요한 경우가 많이 발생했습니다. 그래서 작은 실행 프로그램을 많이 만들어서 popen으로 메인 프로그램 코드를 안 고치고 대응 했었죠.

파이프라인을 이용해 프로그램 간데 데이터를 교환하기도 하는데 최근에는 이렇게 사용하는 경우는 많이 못봤습니다. 파이프라인을 이용하는 방법은 좀 길어질거 같으니 나중에 다시 다루거나 Pass 하겠습니다.

By Mark

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다