하위 프로세스 Popen과 call의 차이점은 무엇입니까 (어떻게 사용할 수 있습니까)?
파이썬에서 외부 프로그램을 호출하고 싶습니다. 나는 모두를 사용하고 Popen()
그리고 call()
그렇게 할 수 있습니다.
둘의 차이점은 무엇입니까?
내 구체적인 목표는 Python에서 다음 명령을 실행하는 것입니다. 리디렉션이 어떻게 작동하는지 잘 모르겠습니다.
./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
보다 일반적 subprocess.call
입니다.
Popen
차단되지 않으므로 프로세스가 실행되는 동안 프로세스와 상호 작용하거나 Python 프로그램의 다른 작업을 계속할 수 있습니다. 호출 Popen
은 Popen
객체 를 반환 합니다.
call
않는 블록을. Popen
생성자 와 동일한 인수를 모두 지원 하므로 프로세스의 출력, 환경 변수 등을 계속 설정할 수 있지만 스크립트는 프로그램이 완료 될 때까지 대기 call
하고 프로세스의 종료 상태를 나타내는 코드를 반환합니다.
returncode = call(*args, **kwargs)
기본적으로 전화와 동일
returncode = Popen(*args, **kwargs).wait()
call
편리한 기능 일뿐입니다. CPython의 구현은 subprocess.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
입니다.
'IT' 카테고리의 다른 글
디렉토리 또는 파일이있는 마운트 / 파티션을 찾는 방법은 무엇입니까? (0) | 2020.06.02 |
---|---|
파이썬에서 여러 줄로 된 dict을 형식화하는 올바른 방법은 무엇입니까? (0) | 2020.06.02 |
Enter를 누르지 않고 표준 입력에서 문자를 캡처합니다. (0) | 2020.06.02 |
서브 클래스에 대한 포인터에서 delete가 기본 클래스 소멸자를 호출합니까? (0) | 2020.06.02 |
다음 LINQ 문은 어떻게 작동합니까? (0) | 2020.06.02 |