개발/Python

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

MinorMan 2022. 10. 23. 13:50
반응형

<질문>

차이점은 무엇입니까subprocess.Popen()그리고os.system()?


<답변1>

확인해보면subprocess section of the Python docs, 다음을 대체하는 방법의 예가 있음을 알 수 있습니다.os.system()~와 함께subprocess.Popen():

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

...와 같은 작업을 수행합니다...

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

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

도움이 된다면 생각해보세요subprocess.Popen()매우 유연한os.system().


<답변2>

subprocess.Popen()의 엄격한 상위 집합입니다.os.system().


<답변3>

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

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

반면:

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

어떤걸 쓸까 고민중이시라면subprocess실행을 위한 모든 기능과 함께 프로세스에 대한 추가 제어가 있기 때문입니다.


<답변4>

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

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

<답변5>

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

반대로 Popen은 다음을 사용해야 합니다.CreateProcess윈도우와_posixsubprocess.fork_execposix 기반 운영 체제에서.

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

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

반응형