Python의 subprocess.call과 subprocess.run의 차이점은 무엇입니까?
나는 지금 한동안 이해하려고 노력해 왔습니다.subprocess.call그리고.subprocess.run. 마지막 것은 파이썬 3.5에 새로 나온 것으로 알고 있으며 둘 다 기반입니다.subprocess.Popen, 하지만 저는 아직 그 차이를 이해할 수 없습니다.
의 정의는 다음과 같이 명확히 언급합니다.
이 값은 다음과 같습니다.
run(...).returncode(입력 및 확인 파라미터가 지원되지 않는 경우 제외)
Python 3.5의 하위 프로세스 문서에 따르면 다음과 같습니다.
파이썬 3.5 이전에는 이 세 가지 기능(즉,
.call(),.check_call(),.check_output())는 상위 API to subprocess로 구성되었습니다.이제 사용할 수 있습니다.run()많은 경우에, 그러나 많은 기존 코드들이 이러한 함수들을 호출합니다.
일반적으로 일부 기능을 교체할 때 즉시 사용되지 않지만 일부 버전에 대한 지원 창이 있습니다.이를 통해 언어 버전을 업그레이드할 때 이전 코드가 손상되는 것을 방지할 수 있습니다.나는 알수가 없습니다..call()미래에 대체될 것입니다.하지만 문서에 의하면, 제가 아는 것은 그것들이 거의 비슷하다는 것입니다.
어떤 것을 사용할지 알고 싶은 사람을 위해 분명히 하기:
subprocess.run ()는 처리할 수 있는 모든 사용 사례에 대해 권장되는 접근 방식입니다.프로세스 설명서에는 다음과 같이 명시되어 있습니다.
하위 프로세스를 호출하는 데 권장되는 접근 방식은 이 프로세스가 처리할 수 있는 모든 사용 사례에 대해 run() 함수를 사용하는 것입니다.보다 고급 사용 사례를 위해 기본적인 Popen 인터페이스를 직접 사용할 수 있습니다.
subprocess.call()은 Older 고급 API(Python 3.5 이전 버전)의 일부입니다.
저는 다른 대답에 동의하는지 잘 모르겠습니다.
데몬 프로세스(Elastic search)를 시작하는 bash 스크립트로 매우 답답한 시간을 보냈습니다.명령어는 실행 가능한 Bash 스크립트에 대한 경로만 제공합니다.
그렇지만subprocess.run(...)이것으로부터 돌아오지 않는 반면,subprocess.call(...)한다.
내 경험으로는, 만약 당신이 그 후에 프로세스를 중지한다면 (예를 들어 터미널에서 실행되는 경우)subprocess.run(...)이것은 그 안에서 시작된 데몬 프로세스를 없애버립니다.하지만 이것은 사실이 아닙니다.subprocess.call(...): 데몬은 행복하게 계속합니다.
두 경우 모두 내가 kwarg를 설정했습니다.shell=True.
저도 노력했습니다.subprocess.runẁ의shell=False(즉, 생략할 경우 기본값)shell): 변경 없음.
다른 가능한 옵션을 찾을 수 없습니다.subprocess.run이 일을 극복할 수 있을 것 같아요, 제가 알 수 있는 한 말이죠.subprocess.call문서가 뭐라고 말하는지는 몰라도 근본적으로 다릅니다.문서를 작성할 때 "많은 경우에 run()을 사용할 수 있지만 많은 기존 코드가 이러한 함수를 호출합니다."(즉, 다음을 포함한 오래된 함수)라고 말합니다.call).
특히 이상하고 실망스러운 것은 데몬을 시작하는 스크립트를 실행할 때 다음과 같은 것입니다.
./bin/elasticsearch -d -p pid
... 그것은 단지 돌아올 뿐이고 당신은 터미널을 꽤 행복하게 닫을 수 있습니다.그래서 뭔가 이상한 점이 있는 것 같습니다subprocess.run, 어떤 슈퍼 expert들이 설명하고 싶어할 겁니다
subprocess.call ()은 명령을 실행하고 명령이 완전히 완료될 때까지 기다려야 할 때 사용됩니다.subprocess.run ()는 stderr 및 stdout 명령을 처리하고 출력을 캡처하며 명령 실행 시간 초과를 정의할 수 있는 등의 제어가 더 필요할 때 사용해야 합니다.
만약 우리가 명령어의 출력에 신경쓰지 않는다면, 그 예는 다음과 같습니다.
subprocess.call([r'C:\Program Files\Mozilla Firefox\Firefox.exe', '-new-tab', 'http://www.google.com/'])
저도 차이점에 대해 완전히 명확하지는 않습니다.
저는 당신이 사용한다고 말할 수 있습니다.subprocess.call()다음 프로세스로 이동하기 전에 프로세스가 완료될 때까지 프로그램을 기다리도록 할 때.의 경우subprocess.run(), 프로그램은 모든 프로세스를 한 번에 실행하려고 시도할 것이고, 이로 인해 프로그램이 불가피하게 중단될 것입니다.
언급URL : https://stackoverflow.com/questions/40697583/whats-the-difference-between-pythons-subprocess-call-and-subprocess-run
'programing' 카테고리의 다른 글
| VBA에서 날짜 값과 CD 날짜의 차이 (0) | 2023.11.04 |
|---|---|
| 쇼트 코드를 제거하고 콘텐츠를 그 사이에 보관합니다. (0) | 2023.11.04 |
| 자바스크립트/Ajax NTLM 인증 (0) | 2023.11.04 |
| PowerShell 5의 쓰기-호스트 대 쓰기-정보 (0) | 2023.11.04 |
| Maria에서 최대 절전 모드를 사용하는 JPQL 업데이트 쿼리에서 오류 발생DB (0) | 2023.10.30 |