Popen 하위 프로세스와 호출의 차이점은 무엇인가(어떻게 사용할 수 있는가?
파이썬에서 외부 프로그램에 전화하고 싶어.나는 두 가지 모두를 사용해 왔다.Popen()
그리고call()
그러기 위해서
그 둘의 차이점은 무엇인가?
나의 구체적인 목표는 파이썬에서 다음 명령을 실행하는 것이다.나는 어떻게 리디렉션되는지 잘 모르겠다.
./my_script.sh > output
서류를 읽어보니 이렇게 적혀 있다.call()
편의 기능 또는 바로 가기 기능이다.사용으로 인해 전력이 손실되는가?call()
대신에Popen()
?
리디렉션을 수행하는 두 가지 방법이 있다.둘 다 다음 중 하나에 적용된다.subprocess.Popen
또는subprocess.call
.
키워드 인수 설정
shell = True
또는executable = /path/to/the/shell
명령어를 거기 있는 그대로 명시하십시오.출력을 파일로 리디렉션하는 중이므로 키워드 인수를 설정하십시오.
stdout = an_open_writeable_file_object
물체가 가리키는 곳
output
파일
subprocess.Popen
보다 일반적이다
Popen
프로세스가 실행되는 동안 프로세스와 상호 작용하거나 Python 프로그램에서 다른 작업을 계속할 수 있도록 차단하지 마십시오.로의 호출.Popen
a를 반환하다Popen
이의를 제기하다
call
차단을 한다.모든 동일한 인수를 지원하는 반면Popen
생성자: 프로세스의 출력, 환경 변수 등을 설정할 수 있으며 스크립트는 프로그램이 완료될 때까지 기다리며call
프로세스의 종료 상태를 나타내는 코드를 반환한다.
returncode = call(*args, **kwargs)
기본적으로 전화하는 것과 같다.
returncode = Popen(*args, **kwargs).wait()
call
단지 편의 기능일 뿐이다.CPython에서의 구현은 하위 프로세스에 있다.py:
def call(*popenargs, timeout=None, **kwargs):
"""Run command with arguments. Wait for command to complete or
timeout, then return the returncode attribute.
The arguments are the same as for the Popen constructor. Example:
retcode = call(["ls", "-l"])
"""
with Popen(*popenargs, **kwargs) as p:
try:
return p.wait(timeout=timeout)
except:
p.kill()
p.wait()
raise
보시다시피 얇은 포장지 입니다.Popen
.
다른 답은 매우 완벽하지만, 여기 경험 법칙이 있다.
call
차단 중:call('notepad.exe') print('hello') # only executed when notepad is closed
Popen
비필수:Popen('notepad.exe') print('hello') # immediately executed
'Programing' 카테고리의 다른 글
Vuex 모듈 장식가:여기에서 vuex 모듈에 액세스하십시오.$store가 모듈을 등록하지 않음 (0) | 2022.04.01 |
---|---|
기본 인코딩이 ASCII인데 Python이 유니코드 문자를 인쇄하는 이유는? (0) | 2022.04.01 |
Netlify에서 React 웹 사이트를 배포할 때 빈 페이지 (0) | 2022.04.01 |
웹 소켓을 통해 동일한 메시지를 여러 번 수신.이전 메시지는 3, 4개의 새 채팅 메시지 이후에 교체됨 (0) | 2022.03.31 |
virtualenv에서 Python 3 사용 (0) | 2022.03.31 |