popen2. Popen3 및 popen2. Popen4는 기본적으로 하위 프로세스로 작동합니다. Popen은 이전 예제에서 출력이 바이트 배열로 출력 변수에 저장되므로 출력이 형식이 지정된 상태가 아님을 보았습니다. 우리는 check_output() 함수에 대한 true로 universal_newlines 옵션을 사용하여 문자열로 출력을 제공합니다. os 예제에는 os.fork() 및 os.kill()을 사용하는 프로세스 간의 시그널링 데모가 포함됩니다. 각 Popen 인스턴스는 자식 프로세스의 프로세스 ID와 함께 pid 특성을 제공하기 때문에 하위 프로세스와 유사한 작업을 수행할 수 있습니다. 예를 들어, 부모 프로세스에 의해 실행되는 자식 프로세스에 대해 이 스크립트를 사용하는 pid는 신호를 기다리는 쉘 스크립트의 자식의 pid와 일치하지 않는데, 이 예에서는 상호 작용하는 세 개의 별도의 프로세스가 있기 때문에 : 이러한 인수는 이전 메서드 인 os.popen과 동일한 의미를 갖습니다. 이 메서드는 더 이상 사용되지 않으며 파이썬 설명서는 다음과 같이 popen3 메서드를 교체할 것을 권고합니다.
bufsize 매개 변수는 버퍼링할 데이터의 양을 popen에 알려주며 다음 값 중 하나를 가정할 수 있습니다. 통신() 메서드는 모든 출력을 읽고 자식 프로세스가 반환되기 전에 종료될 때까지 기다립니다. Popen 인스턴스에서 사용하는 개별 파이프 핸들을 작성하고 읽을 수도 있습니다. 표준 입력에서 읽고 표준 출력에 쓰는 간단한 에코 프로그램은 이를 보여줍니다: 프로세스 트리가 유닉스에서 작동하는 방식 때문에 Popen에서 만든 프로세스가 하위 프로세스를 생성하면 해당 자식이 부모. 즉, 예를 들어 SIGINT 또는 SIGTERM을 전송하여 종료하기가 어려울 수 있습니다. stdin, stdout 및 stderr에 대한 다른 인수를 전달하여 os.popen()의 변형을 모방할 수 있습니다. 버전 3.3의 새 버전: SubprocessError 기본 클래스가 추가되었습니다. 하위 프로세스오류의 하위 클래스는 자식 프로세스를 기다리는 동안 시간 시간이 만료될 때 발생합니다.