답변:
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().
shell=True하다면 피해야한다는 점을 지적 할 수도 있습니다. 이 옵션을 사용하는 것은의 장점 중 하나이며 subprocess.Popen()도우미 기능입니다.
os.system및 subprocess.call/popen/run마무리에 대한 명령 블록 / 대기 작업을 수행합니다 stackoverflow.com/a/14059648/4752883
os.system이는 Unix system명령 과 동일하며 명령 subprocess이 제공하는 많은 기능을 Popen더 쉽고 제어 가능한 인터페이스 로 제공하기 위해 만들어진 도우미 모듈입니다 . 그것들은 Unix Popen 명령 과 유사하게 설계되었습니다 .
system()를 호출하여 command에 지정된 명령을 실행하고 명령/bin/sh -c command이 완료된 후 반환합니다.
이므로:
이
popen()함수는 파이프를 만들고, 분기하고, 셸을 호출하여 프로세스를 엽니 다.
어떤 것을 사용할지 생각하고 있다면 subprocess실행을위한 모든 기능과 프로세스에 대한 추가 제어가 있기 때문에 확실히 사용 하십시오.
Windows에서 python (cpython)을 실행할 때 <built-in function system> os.system 은 _wsystem 커튼 아래에서 실행되고 Windows가 아닌 OS를 사용하는 경우 system을 사용 합니다 .
반대로 Popen 은 Windows 에서는 CreateProcess 를 사용 하고 posix 기반 운영 체제에서는 _posixsubprocess.fork_exec 를 사용해야 합니다.
즉, 중요한 조언은 os.system 문서 에서 나옵니다 .
하위 프로세스 모듈은 새 프로세스를 생성하고 결과를 검색하기위한보다 강력한 기능을 제공합니다. 이 기능을 사용하는 것보다 해당 모듈을 사용하는 것이 좋습니다. 유용한 레시피는 하위 프로세스 문서의 하위 프로세스 모듈로 이전 함수 바꾸기 섹션을 참조하세요.
sts = p.wait()마지막 줄 대신 사용할 수도 있습니다 .