본문 바로가기
1. SW 개발 & IT 트렌드

Python 에서 외부 프로세스 실행

by soosun 2020. 5. 22.

외부 프로그램의 실행은 os 모듈을 사용할 수도 있느나 보다 전문적으로는 subprocess 모듈을 사용한다.

 

import subprocess

subprocess.run('notepad')

Out[75]: CompletedProcess(args='notepad', returncode=0)

 

subprocess.run(['notepad','ttt.out'])

Out[76]: CompletedProcess(args=['notepad', 'ttt.out'], returncode=0)

 

subprocess.run(['notepad','SomeWord.txt'])

 

다음은 도스용 프로그램을 사용한 예이다. 이때 wait()를 통해 프로그램이 종료될 때 까지 기다린다.

 

방법 1 : 직접 실행화일 위치를 지정. r에 주의

import subprocess

subprocess.SW_HIDE = 1

r = subprocess.Popen(r'D:\DevProg\HFC3.0\resource\Distrib-x64-2017-08-21\hfAnalyzer -o'+inputFileName, shell=True).wait()

if r == 1:

   print('running error')

 

방법 2 : 실행 파일의 위치를 os의 PATH로 지정. r에 주의

import os

env = os.environ

newpath = r'D:\DevProg\HFC3.0\resource\Distrib-x64-2017-08-21;'+env['PATH']

env['PATH'] = newpath

 

import subprocess

subprocess.SW_HIDE = 1

r = subprocess.Popen('hfAnalyzer -o '+inputFileName, shell=True).wait()

if r == 1:

   print('running error')

 

방법 3 : 실행 파일의 위치를 Popen의 PATH로 지정. r에 주의

import os

env = os.environ

newpath = r'D:\DevProg\HFC3.0\resource\Distrib-x64-2017-08-21;'+env['PATH']

 

import subprocess

subprocess.SW_HIDE = 1

r = subprocess.Popen('hfAnalyzer -o '+inputFileName, shell=True,env={'PATH':newpath}).wait()

if r == 1:

   print('running error')

 

참고사항 : wait() 메쏘드는 자식 프로세스가 종료되기를 기다리고, 그 리턴 코드를 받아온다. wait() 를 사용하지 않으면 return 코드를 사용할 이유가 없다.

 

 

subprocess로 자식프로세스를 실행하는 방법은 간단합니다. 다음 코드에서는 Popen생성자가 프로세스를 시작합니다. communicate 메서드는 자식 프로세스의 출력을 읽어오고 자식 프로세스가 종료할 때까지 대기 합니다.

 

import subprocess

 

proc = subprocess.Popen(['echo', 'Hello world'], stdout=subprocess.PIPE)

out, err = proc.communicate()

print(out)

print(out.decode('utf-8'))

 

# source: https://wikidocs.net/book/1704, https://wikidocs.net/14663

'1. SW 개발 & IT 트렌드' 카테고리의 다른 글

Python - PEP 8 파이썬 코딩 스타일  (0) 2020.05.26
Raspberry Pi - wiringPi  (0) 2020.05.24
OpenCV(Open Source Computer Vision) Library  (0) 2020.05.20
Pillow - Python Imaging Library  (0) 2020.05.20
Matplotlib.org  (0) 2020.05.20

댓글