[python] subprocess.Popen과 os.system의 차이점

subprocess.Popen()과 의 차이점은 무엇입니까 os.system()?



답변

Python 문서하위 프로세스 섹션 을 확인하면 다음 으로 대체하는 방법에 대한 예제가 있음을 알 수 os.system()있습니다 subprocess.Popen().

sts = os.system("mycmd" + " myarg")

… 같은 일을 …

sts = Popen("mycmd" + " myarg", shell=True).wait()

“개선 된”코드는 더 복잡해 보이지만 일단 알게 subprocess.Popen()되면 다른 것이 필요하지 않기 때문에 더 좋습니다 . 세 개의 다른 Python 모듈에 흩어져 있던 subprocess.Popen()여러 다른 도구 ( os.system()그 중 하나 일뿐)를 대체 합니다.

도움이된다면 subprocess.Popen()매우 유연한 것으로 생각하십시오 os.system().


답변

subprocess.Popen()의 엄격한 수퍼 세트입니다 os.system().


답변

os.system이는 Unix system명령 과 동일하며 명령 subprocess이 제공하는 많은 기능을 Popen더 쉽고 제어 가능한 인터페이스 로 제공하기 위해 만들어진 도우미 모듈입니다 . 그것들은 Unix Popen 명령 과 유사하게 설계되었습니다 .

system()를 호출하여 command에 지정된 명령을 실행하고 명령 /bin/sh -c command이 완료된 후 반환합니다.

이므로:

popen()함수는 파이프를 만들고, 분기하고, 셸을 호출하여 프로세스를 엽니 다.

어떤 것을 사용할지 생각하고 있다면 subprocess실행을위한 모든 기능과 프로세스에 대한 추가 제어가 있기 때문에 확실히 사용 하십시오.


답변

하위 프로세스는 popen2를 기반으로하므로 여러 가지 장점 이 있습니다. 여기PEP에 전체 목록이 있지만 일부는 다음과 같습니다.

  • 쉘에서 파이프 사용
  • 더 나은 개행 지원
  • 더 나은 예외 처리

답변

Windows에서 python (cpython)을 실행할 때 <built-in function system> os.system_wsystem 커튼 아래에서 실행되고 Windows가 아닌 OS를 사용하는 경우 system을 사용 합니다 .

반대로 Popen 은 Windows 에서는 CreateProcess 를 사용 하고 posix 기반 운영 체제에서는 _posixsubprocess.fork_exec 를 사용해야 합니다.

즉, 중요한 조언은 os.system 문서 에서 나옵니다 .

하위 프로세스 모듈은 새 프로세스를 생성하고 결과를 검색하기위한보다 강력한 기능을 제공합니다. 이 기능을 사용하는 것보다 해당 모듈을 사용하는 것이 좋습니다. 유용한 레시피는 하위 프로세스 문서의 하위 프로세스 모듈로 이전 함수 바꾸기 섹션을 참조하세요.


답변