Python Subprocess.Popen 예제

Python Subprocess Popen Yeje



Python 하위 프로세스는 다양한 셸 명령, 프로세스를 실행하고 Python 스크립트를 사용하여 다른 스크립트 또는 실행 파일을 실행하는 데 사용되는 유용한 모듈 중 하나입니다. 한 프로세스에서 다른 프로세스로 데이터를 리디렉션하고 하위 프로세스에서 생성된 오류를 처리하는 데에도 사용할 수 있습니다. subprocess 모듈에는 다양한 목적으로 사용되는 많은 클래스가 있습니다. 'subprocess.Popen' 클래스는 외부 프로세스와 상호 작용하고 프로세스 간에 다양한 유형의 작업을 수행하는 데 사용되는 이 모듈의 클래스 중 하나입니다. 이 튜토리얼에서는 Python 스크립트에서 'subprocess.Popen' 클래스를 여러 번 사용하는 방법을 보여줍니다.

목차 주제:

  1. 간단한 Linux 명령 실행
  2. 입력 데이터로 명령 실행
  3. Python 스크립트 실행
  4. 하위 프로세스 오류 처리
  5. Subprocess.Popen의 코드를 반환합니다.
  6. 하위 프로세스의 출력을 파일로 리디렉션
  7. Subprocess.Popen을 사용한 다중 처리
  8. 입력 및 출력 스트림 처리 에스
  9. 시간 초과 및 지연 제어
  10. 스트리밍 입력 읽기

간단한 Linux 명령 실행

'date' 명령은 현재 시스템 날짜와 시간을 표시하는 데 사용됩니다. 'date' 명령을 실행하고 이 명령의 출력을 인쇄하는 하위 프로세스를 생성하는 다음 스크립트를 사용하여 Python 파일을 생성합니다.

#모듈 가져오기

수입 하위 프로세스

#하위 프로세스에 대한 명령을 정의하고

#Popen() 함수를 사용하여 프로세스 열기

산출 = 하위 프로세스 . 포펜 ( [ '날짜' ] , 표준 출력 = 하위 프로세스 . 파이프 )

#프로세스와 통신하여 출력 및 오류를 검색합니다.

표준 출력 , 표준 오류 = 산출. 의사소통하다 ( )

#출력을 인쇄합니다

인쇄 ( 표준 출력. 풀다 ( ) )

산출:







이전 스크립트를 실행하면 다음 출력이 나타납니다.



  p1



맨 위로 이동





입력 데이터로 명령 실행

'-c' 옵션이 있는 'wc' 명령은 이 명령과 함께 제공되는 문자열 값의 총 문자 수를 계산하는 데 사용됩니다. 'wc –c' 명령을 실행하기 위해 Popen() 함수로 하위 프로세스를 생성하는 다음 스크립트를 사용하여 Python 파일을 생성합니다. 스크립트를 실행한 후 터미널에서 문자열 값을 가져오고 입력 문자열의 전체 문자가 출력에 인쇄됩니다.

#모듈 가져오기

수입 하위 프로세스

#하위 프로세스에 대한 명령을 정의하고

#Popen() 함수를 사용하여 프로세스 열기

산출 = 하위 프로세스 . 포펜 ( [ '화장실' , '-씨' ] , 표준 출력 = 하위 프로세스 . 파이프 )

#프로세스와 통신하여 출력 및 오류를 검색합니다.

표준 출력 , 표준 오류 = 산출. 의사소통하다 ( )

#출력을 인쇄합니다

인쇄 ( 표준 출력. 풀다 ( ) )

산출:



'Python 하위 프로세스 예제' 입력 값에 대해 다음 출력이 나타납니다.

맨 위로 이동

Python 스크립트 실행

두 숫자의 합을 계산하는 다음 스크립트를 사용하여 'sum.py'라는 Python 파일을 생성하고 이러한 숫자는 명령줄 인수로 제공됩니다.

sum.py

#필요한 모듈 가져오기

수입 시스템

#총 인수 계산

N = 오직 ( 시스템 . argv )

#처음 두 개의 인수 값을 추가합니다.

합집합 = 정수 ( 시스템 . argv [ 1 ] ) + 정수 ( 시스템 . argv [ 2 ] )

#추가 결과 인쇄

인쇄 ( '의 합 ' + 시스템 . argv [ 1 ] + ' 그리고 ' + 시스템 . argv [ 2 ] + ' 이다' , 합집합 )

파이썬 만들기 파일 ~와 함께 Python을 실행하는 다음 스크립트 파일 명명 된 합집합 . 파이 ~와 함께 두 개의 인수를 생성하여 하위 프로세스 .

#모듈 가져오기

수입 하위 프로세스

#하위 프로세스에서 Python 스크립트를 실행하고

#Popen() 함수를 사용하여 프로세스 열기

산출 = 하위 프로세스 . 포펜 ( [ '파이썬3' , 'sum.py' , '25' , '55' ] , 표준 출력 = 하위 프로세스 . 파이프 ) #프로세스와 통신하여 출력 및 오류를 검색합니다.

표준 출력 , 표준 오류 = 산출. 의사소통하다 ( )

#출력을 인쇄합니다

인쇄 ( 표준 출력. 풀다 ( ) )

산출:

이전 스크립트를 실행하면 다음 출력이 나타납니다.

맨 위로 이동

`

하위 프로세스 오류 처리

'try-Exception' 블록을 사용하여 하위 프로세스의 오류를 처리하는 다음 스크립트로 Python 파일을 만듭니다. 사용자로부터 명령을 받아 하위 프로세스에 의해 실행됩니다. 사용자로부터 잘못된 명령을 받은 경우 오류 메시지가 표시됩니다.

#모듈 가져오기

수입 하위 프로세스

수입 시스템

#사용자로부터 명령을 받습니다

명령 = 입력 ( '올바른 명령을 입력하세요: ' )

노력하다 :

#Popen() 함수를 사용하여 프로세스 열기

산출 = 하위 프로세스 . 포펜 ( [ 명령 ] , 표준 출력 = 하위 프로세스 . 파이프 )

#프로세스와 통신하여 출력 및 오류를 검색합니다.

표준 출력 , 표준 오류 = 산출. 의사소통하다 ( )

#출력을 인쇄합니다

인쇄 ( 표준 출력. 풀다 ( ) )

제외하고 :

인쇄 ( '오류:' , 시스템 . ex_info ( ) )

산출:

'pwd' 명령이 유효한 명령인 입력으로 사용되면 다음 출력이 나타납니다.

  p4-1

'usr' 명령이 유효한 명령인 입력으로 사용되면 다음 출력이 나타납니다.

  p4-2

맨 위로 이동

Subprocess.Popen의 코드를 반환합니다.

현재 위치에서 모든 Python 파일 목록을 가져오기 위해 하위 프로세스를 통해 'ls' 명령을 실행하는 다음 스크립트를 사용하여 Python 파일을 만듭니다. 스크립트는 하위 프로세스가 완료되기를 기다리고 반환 코드를 인쇄합니다.

#모듈 가져오기

수입 하위 프로세스

수입 시스템

#명령을 설정하세요

명령 = [ 'ls' , '-엘' , '*.py' ]

노력하다 :

#Popen() 함수를 사용하여 프로세스 열기

산출 = 하위 프로세스 . 포펜 ( 명령 , 표준 출력 = 하위 프로세스 . 파이프 ,

표준 오류 = 하위 프로세스 . 파이프 , 텍스트 = 진실 )

#프로세스가 완료될 때까지 기다리세요

retCode = 산출. 기다리다 ( )

#반환 코드 인쇄

인쇄 ( '반환 코드:' , retCode )

제외하고 :

#잘못된 내용에 대한 오류 메시지 인쇄

인쇄 ( '오류:' , 시스템 . ex_info ( ) )

산출:

이전 스크립트를 실행한 후에도 비슷한 출력이 나타납니다.

맨 위로 이동

하위 프로세스의 출력을 파일로 리디렉션

하위 프로세스의 출력을 텍스트 파일에 기록하는 다음 스크립트를 사용하여 Python 파일을 만듭니다. 하위 프로세스에 의해 실행되는 명령은 사용자로부터 가져옵니다.

#가져오기 모듈

수입 하위 프로세스

#파일이름정의

파일 이름 = 'outfile.txt'

#핑 명령을 받아

cmd = 입력 ( '핑 명령을 입력하세요: ' )

#입력받은 내용을 공간을 기준으로 분할

인수 = cmd . 나뉘다 ( )

#파일에 명령 출력 쓰기

~와 함께 열려 있는 ( 파일 이름 , '안에' ) ~처럼 아웃데이터:

프로세스 = 하위 프로세스 . 포펜 ( 인수 , 표준 출력 = 데이터가 부족하다 )

#프로세스가 완료될 때까지 기다립니다.

반환_코드 = 프로세스. 기다리다 ( )

산출:

다음 출력에 따르면 'ping -c 3 www.google.com ” 명령은 사용자로부터 취해지며 “cat” 명령은 하위 프로세스에 의해 작성된 파일의 내용을 표시하는 데 사용됩니다.

맨 위로 이동

Subprocess.Popen을 사용한 다중 처리

하위 프로세스를 사용하여 다중 처리 사용을 보여주는 다음 스크립트를 사용하여 Python 파일을 만듭니다. 여기서는 display_msg()라는 함수가 다중 처리를 사용하여 여러 번 호출됩니다.

#필요한 모듈 가져오기

수입 다중 처리

수입 하위 프로세스

#멀티프로세싱에 의해 호출될 함수를 정의합니다.

데프 display_msg ( N ) :

#format() 함수를 사용하여 명령을 정의합니다.

cmd = 'echo '파이썬 프로그래밍'' . 체재 ( N )

#Popen() 함수를 사용하여 프로세스 열기

프로세스 = 하위 프로세스 . 포펜 ( cmd , 껍데기 = 진실 , 표준 출력 = 하위 프로세스 . 파이프 )

#프로세스와 통신하여 출력 및 오류를 검색합니다.

표준 출력 , 오류 = 프로세스. 의사소통하다 ( )

#출력을 인쇄합니다

인쇄 ( 표준 출력. 풀다 ( ) )

#multiprocessing.Pool을 생성하여 함수를 5번 호출합니다.

~와 함께 다중 처리. 수영장 ( 다중 처리. CPU_수 ( ) ) ~처럼 mp:

#함수 매핑

mp. 지도 ( display_msg , 범위 ( 1 , 5 ) )

산출:

이전 스크립트를 실행하면 다음 출력이 나타납니다.

맨 위로 이동

입력 및 출력 스트림 처리

이 예제의 Python 스크립트를 만들기 전에 다음 내용으로 'test.txt'라는 텍스트 파일을 만듭니다.

테스트.txt

파이썬

세게 때리다

PHP

하나의 하위 프로세스를 사용하여 'test.txt' 파일의 내용을 읽고 다른 하위 프로세스를 사용하여 해당 텍스트 파일에서 특정 단어를 검색하는 다음 스크립트를 사용하여 Python 파일을 만듭니다. 여기서는 이 단어가 포함된 “test.txt 파일”에서 “python”이라는 단어를 검색합니다.

#모듈 가져오기

수입 하위 프로세스

#입력 스트림에 대한 프로세스 정의

과정에서 = 하위 프로세스 . 포펜 ( [ '고양이' , '테스트.txt' ] , 표준 출력 = 하위 프로세스 . 파이프 , 텍스트 = 트루 > #출력 스트림에 대한 프로세스 정의

out_process = 하위 프로세스 . 포펜 (

[ '꽉 붙잡음' , '파이썬' ] , 표준 입력 = 과정에서. 표준 출력 ,

표준 출력 = 하위 프로세스 . 파이프 , 텍스트 = 진실 )

#입력 및 출력 프로세스의 출력을 저장합니다.

산출 , _ = out_process. 의사소통하다 ( )

#출력을 인쇄합니다

인쇄 ( '산출:' , 산출 )

산출:

스크립트를 실행하면 다음 출력이 나타납니다.

맨 위로 이동

타이머를 사용하여 하위 프로세스 제어

하위 프로세스를 통해 명령을 실행하기 위해 타이머를 사용하는 다음 스크립트를 사용하여 Python 파일을 만듭니다. 여기서는 'try-Exception' 블록을 사용하여 타이머를 시작하고 'finally' 블록을 사용하여 타이머를 취소합니다.

#하위 프로세스 모듈 가져오기

수입 하위 프로세스

#타이머 모듈 가져오기

~에서 스레딩 수입 시간제 노동자

#명령을 정의합니다

cmd = [ '핑' , 'www.example.com' ]

#프로세스를여세요

= 하위 프로세스 . 포펜 (

cmd , 표준 출력 = 하위 프로세스 . 파이프 , 표준 오류 = 하위 프로세스 . 파이프 )

#타이머 정의

시간제 노동자 = 시간제 노동자 ( 2 , 람다 과정: 과정. 죽이다 ( ) , [ ] )

노력하다 :

#타이머를 시작해

시간제 노동자. 시작 ( )

#출력 읽기

표준 출력 , _ = 피. 의사소통하다 ( )

#인쇄 출력

인쇄 ( 표준 출력. 풀다 ( ) )

제외하고 :

#잘못된 내용에 대한 오류 메시지 인쇄

인쇄 ( '오류:' , 시스템 . ex_info ( ) )

마지막으로 :

#타이머를 멈춰요

시간제 노동자. 취소 ( )

산출:

스크립트를 실행하면 다음 출력이 나타납니다.

맨 위로 이동

스트리밍 입력 읽기

'while' 루프를 사용하여 하위 프로세스 출력의 내용을 읽고 해당 내용을 변수에 저장하는 Python 파일을 만듭니다. 이 변수의 내용은 나중에 인쇄됩니다. 여기서는 'curl' 명령이 하위 프로세스에서 사용됩니다. www.google.com URL.

#가져오기 모듈

수입 하위 프로세스

#명령 정의

cmd = [ '곱슬 곱슬하다' , 'www.example.com' ]

= 하위 프로세스 . 포펜 ( cmd , 표준 출력 = 하위 프로세스 . 파이프 ,

표준 오류 = 하위 프로세스 . 파이프 , 텍스트 = 진실 >

#출력변수 초기화

산출 = ''

~하는 동안 진실 :

#프로세스 출력을 한 줄씩 읽습니다.

= 피. 표준 출력 . 판독선 ( )

#하위 프로세스가 완료되면 루프에서 종료합니다.

만약에 ~ 아니다 ln:

부서지다

산출 = 출력 + ln

#라인을 인쇄하세요

인쇄 ( 산출 )

#프로세스를 마친 후 반환 코드를 가져옵니다.

반환_코드 = 피. 기다리다 ( )

#반환 코드 인쇄

인쇄 ( '반환 코드: ' , 반환_코드 )

산출:

세 가지 출력 중 마지막 부분이 다음 이미지에 표시되어 있습니다. 하위 프로세스를 완료한 후 반환 코드는 0입니다.

맨 위로 이동

결론

이 튜토리얼에서는 Python 사용자가 이 함수의 기본 사용법을 알 수 있도록 도와주는 여러 Python 스크립트를 사용하여 Python 하위 프로세스.Popen()의 다양한 용도를 보여줍니다.