-
Python_ subprocess_외부 프로세스 실행 및 입출력 제어Python study/문법공부 2022. 9. 27. 13:59
1. subprocess
subprocess의 주요한 목적은,
현재 소스코드 안에서 다른 프로세스를 실행하여 그 과정에서 데이터의 입출력을 제어하기 위함이다.
subprocess 데이터 제어 예시 즉, 새로운 프로세스를 실행하고, 프로세사의 입출력 및 에러 결과에 대한 리턴코드를 개발자가
직접 제어하게 해주는 모듈이다.
2. subprocess method
2.1) subprocess.run
subprocess.run
(args, *, stdin=None, input=None, stdout=None, stderr=None, capture_output=False, shell=False, cwd=None, timeout=None, check=False, encoding=None, errors=None, text=None, env=None, universal_newlines=None, **other_popen_kwargs)
선언되지 않은 옵션의 기본값은 False 와 None
arguments Description args 이곳에 써 있는 명령어를 실행한다. stdin, stdout, stderr 표준 입,출력, 오류를 설정한다.(데이터 흐름 제어) input 입력데이터를 설정한다. capture_output True 라면 Run 메소드에 의해 실행된 값을 변수에 저장 할 수 있다.
var = subprocess.run()shell 쉘 화면에 출력을 할 것인가(윈도우 쉘 명령어를 쓰려면 반드시 True 여야함) cwd Current Working Directory (현재 실행중인 디렉토리를 반환) timeout 지정시간 이후에 해당 프로세스가 정지되거나 삭제된다. check True 라면 CalledProcessError 예외(Exception)이 발생한다. .run()으로 해당 프로세스가 정상 종료되면 CompletedProcess 가 선언되어 결과값이 0으로 리턴되어야 하는데, 이를 0이 아닌 값으로 만들겠다는 뜻. 선언된 예외처리에 run()의 입력값과 데이터가 보관된다. encoding subprocess는 결과를 바이너리 형태로 반환하게 되는데, 이를 원하는 코딩방식으로 바꿔준다. 'utf8'등을 취한다. text True 라면 결과값을 string 의 형태로 출력한다. errors encoding 과 마찬가지이다. evn None이 아니라면 지정한 새로운 환경에서 실행된다는 뜻이다. 인수와 함께 명령을 실행하고 CompletedProcess 인스턴스를 반환합니다. 반환된 인스턴스에는 args, returncode, stdout 및 표준어. 기본적으로 stdout 및 stderr은 캡처되지 않으며 해당 속성은 없음이 됩니다. 캡처하려면 stdout=PIPE 및/또는 stderr=PIPE를 전달합니다. 검사가 True이고 종료 코드가 0이 아닌 경우 호출된 프로세스 오류. CalledProcessError 개체에는 반환 코드가 있습니다. returncode 속성에서, 그리고 그 스트림인 경우 output & stderr 속성에서 잡혔다. 시간 초과가 주어지고 프로세스가 너무 오래 걸리면 TimeoutExpired 예외가 발생합니다. 선택적 인수 "input"이 있어 다음을 수행할 수 있습니다. 하위 프로세스의 표준 입력에 바이트 또는 문자열을 전달합니다. 이 인수를 사용하면 Popen 생성자의 "stdin" 인수를 사용할 수도 없습니다. 내부적으로 사용될 것입니다. 기본적으로 모든 통신은 바이트 단위이므로 모든 "입력"은 바이트이고 stdout 및 stderr은 바이트입니다. 텍스트 모드인 경우 아무 "입력"은 문자열이어야 하며 stdout 및 stderr은 디코딩된 문자열입니다. 로케일 인코딩에 따라 또는 설정된 경우 "인코딩"에 따라. 텍스트 모드는 텍스트, 인코딩, 오류 또는 universal_newlines 중 하나를 설정하여 트리거됩니다. 다른 인수는 Popen 생성자와 동일합니다.
2.2) subprocess.check_output
리눅스 쉘 또는 윈도우의 cmd 에서 실행후 출력되는 데이터를 return 받고 싶을때 사용한다.
즉, 프로세스가 실행되고 종료되면 표준출력으로 넘어온 데이터를 읽어서 그 값을 리턴해주는 함수라 보면 되겠다.
프로세스가 사용하는 입력의 경우에도 input = 인자를 통해서 미리 지정 해 줄 수 있다.
universal_newlines = 파라미터는 사실 그 이름과 의미가 약간모호한데, 서브프로세스와의 파이프 통신을 문자열로 주고받는 것으로 처리한다.( 기본적으로 False 값일 때에는 파이프를 통해서 바이트 스트림이 오간다.
import subprocess out = subprocess.check_output(['dir'], shell=True, universal_newlines=True)
subprocess.check_output 리턴값 print 결과 'Python study > 문법공부' 카테고리의 다른 글
[Python] Print 문안에서 if 문을 사용하는 방법. (0) 2023.04.26 python_shutil : 고수준 파일 연산 (2) 2022.10.07 python_*args,**kwargs (0) 2022.09.27 python _map() (0) 2021.11.03 할당 연산자 (0) 2021.11.01