<질문>
차이점은 무엇입니까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 모듈은 새로운 프로세스를 생성하고 결과를 검색하기 위한 보다 강력한 기능을 제공합니다. 이 기능을 사용하는 것보다 해당 모듈을 사용하는 것이 좋습니다. 몇 가지 유용한 레시피는 하위 프로세스 문서의 하위 프로세스 모듈로 이전 함수 교체 섹션을 참조하세요.
'개발 > Python' 카테고리의 다른 글
[파이썬] 오류없이 아무것도 커밋하지 않는 방법은? (0) | 2022.10.24 |
---|---|
[파이썬] 고유한 파일 이름을 만드는 방법은? (0) | 2022.10.24 |
[파이썬] 모듈의 별칭을 정의할 수 있습니까? (0) | 2022.10.23 |
[파이썬] numpy 배열에 단일 요소 추가 (0) | 2022.10.23 |