popen 예제

새 프로세스에서 자식 프로그램을 실행합니다. 유닉스에서 클래스는 os.execvp()와 같은 동작을 사용하여 자식 프로그램을 실행합니다. Windows에서 클래스는 Windows CreateProcess() 함수를 사용합니다. Popen에 대한 인수는 다음과 같습니다. 다양한 사용 사례를 지원하기 위해 Popen 생성자(및 편의 함수)는 많은 수의 선택적 인수를 허용합니다. 대부분의 일반적인 사용 사례의 경우 이러한 인수 중 상당수는 기본값으로 안전하게 남을 수 있습니다. 가장 일반적으로 필요한 인수는 Popen() 호출 직후에 명령이 실행되며, 출력만 지정했기 때문에 파이프로 리디렉션됩니다. stdout=None을 설정하면 호출되는 통신과 관계없이 명령이 실행되는 것을 볼 수 있습니다. 입력 필터를 열기 전에 버퍼링된 판독값은 해당 필터의 표준 입력이 잘못 배치될 수 있습니다. 출력 필터와 유사한 문제는 신중한 버퍼 플러싱으로 방지할 수 있습니다. 예를 들어 fflush()를 사용합니다.

Windows STARTUPINFO 구조의 부분 지원은 Popen 생성에 사용됩니다. Popen 생성 플래그 매개 변수를 지정하여 새 프로세스 그룹을 만들도록 지정합니다. 이 플래그는 하위 프로세스에서 os.kill()를 사용하는 데 필요합니다. 이 특성에 대해 SW_HIDE가 제공됩니다. Popen이 셸=True로 호출될 때 사용됩니다. 정렬 명령에 파이프를 열고 문자열 배열을 정렬하는 이 예제를 생각해 보십시오. 개발자가 편의 기능이 적용되지 않는 덜 일반적인 경우를 처리 할 수 있도록 많은 유연성을 제공합니다. Popen에 대한 stdin, stdout 또는 stderr 인수로 사용할 수 있고 표준 스트림에 대한 파이프를 열어야 한다는 것을 나타내는 특수 값입니다. 프로세스의 stdin에 데이터를 보내려면 stdin=PIPE를 사용하여 Popen 개체를 만들어야 합니다. 마찬가지로, 결과 튜플에서 없음 이외의 것을 얻으려면 stdout =PIPE 및/또는 stderr=PIPE를 제공해야합니다.

이 플래그는 Popen이 shell=True로 생성될 때 항상 설정됩니다. 셸=True가 있는 유닉스에서는 쉘이 기본값으로 /bin/sh로 설정됩니다. args가 문자열인 경우 문자열은 셸을 통해 실행할 명령을 지정합니다. 즉, 셸 프롬프트에 입력할 때와 똑같이 문자열의 서식이 지정되어야 합니다. 예를 들어, 인용 또는 백슬래시에 공백이 있는 파일 이름을 이스케이프합니다. args가 시퀀스인 경우 첫 번째 항목은 명령 문자열을 지정하고 추가 항목은 셸 자체에 대한 추가 인수로 처리됩니다. 즉, Popen은 다음과 같습니다 : 다음 예제는 현재 디렉토리에서 파일 목록을 얻기 위해 popen() 및 pclose()를 사용하여 명령 ls *를 실행하는 방법을 보여 줍니다. 자식 프로세스 출력 볼륨을 기반으로 합니다. 파이프가 필요할 때 통신() 메서드와 함께 Popen을 사용합니다. Popen이 잘못된 인수로 호출되면 ValueError가 발생합니다.

위에 표시된 인수는 자주 사용되는 인수(따라서 축약된 서명에서 약간 이상한 표기법)에서 아래에 설명된 가장 일반적인 인수일 뿐입니다. 전체 함수 시그니처는 Popen 생성자의 서명과 동일합니다 . Popen 클래스의 인스턴스에는 다음과 같은 메서드가 있습니다: #print `Hello World` to stdoutcommand1 = [`echo`]command1.append(`Hello World`)=process1 = 하위 프로세스. Popen(명령1, stdout=하위 프로세스) PIPE) popen()의 또 다른 예로, 두 개의 파이프(ls 명령에 하나, 정렬할 파이프)를 여는 이 작은 프로그램을 고려하십시오: popen2는 기본적으로 모든 파일 설명기를 닫지만 popen을 사용하여 close_fds=True를 지정해야 합니다. shell=False는 모든 셸 기반 기능을 비활성화하지만 이 취약점으로 인해 어려움을 겪지는 않습니다. 셸=False가 작동하도록 하는 데 유용한 힌트는 Popen 생성자 설명서의 메모를 참조하십시오. IMHO는 명령과 더 나은 처음 2 예입니다반환 코드가 관련되어있는 경우,예를 들어 이동 또는 복사 작업 (나는 시스템 관리가 내 일이 아니지만) 이러한 옵션은 다른 모든 옵션과 함께 Popen에 더 자세히 설명되어 있습니다. 생성자 설명서.