답변:
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()
마지막 줄 대신 사용할 수도 있습니다 .