이 기사는 Python의 하위 프로세스 모듈 수준 방법(코드 포함)을 소개합니다. 이는 특정 참조 가치가 있으므로 도움이 될 수 있습니다.
subprocess.run()
실행하고 args 매개변수로 지정된 명령이 완료될 때까지 기다린 후 CompletedProcess 인스턴스를 반환합니다.
매개변수: (*popenargs, input=None, Capture_output=False, timeout=None, check=False, **kwargs). input, Capture_output, timeout, check를 제외한 다른 매개변수는 Popen 생성자 매개변수와 일치합니다.
capture_output: True로 설정하면 stdout 및 stderr을 파이프로 리디렉션하고 더 이상 stderr 또는 stdout 매개변수를 전달할 수 없으며 그렇지 않으면 예외가 발생합니다.
input: 입력 매개변수는 하위 프로세스의 표준 입력으로 Popen.communicate() 메서드에 전달되며 문자열(인코딩 또는 오류 매개변수를 지정해야 하거나 텍스트를 True로 설정해야 함) 또는 바이트여야 합니다. 유형. None이 아닌 입력 매개변수는 stdin 매개변수와 함께 사용할 수 없습니다. 그렇지 않으면 예외가 발생하고 Popen 인스턴스를 구성하는 데 사용되는 stdin 매개변수는 subprocess.PIPE로 지정됩니다.
timeout: Popen.communicate() 메서드에 전달됩니다.
check: True로 설정하면 프로세스 실행이 0이 아닌 상태 코드를 반환하는 경우 CalledProcessError 예외가 발생합니다.
# 源码 def run(*popenargs, input=None, capture_output=False, timeout=None, check=False, **kwargs): if input is not None: if 'stdin' in kwargs: raise ValueError('stdin and input arguments may not both be used.') kwargs['stdin'] = PIPE if capture_output: if ('stdout' in kwargs) or ('stderr' in kwargs): raise ValueError('stdout and stderr arguments may not be used ' 'with capture_output.') kwargs['stdout'] = PIPE kwargs['stderr'] = PIPE with Popen(*popenargs, **kwargs) as process: try: stdout, stderr = process.communicate(input, timeout=timeout) except TimeoutExpired: process.kill() stdout, stderr = process.communicate() raise TimeoutExpired(process.args, timeout, output=stdout, stderr=stderr) except: # Including KeyboardInterrupt, communicate handled that. process.kill() # We don't call process.wait() as .__exit__ does that for us. raise retcode = process.poll() if check and retcode: raise CalledProcessError(retcode, process.args, output=stdout, stderr=stderr) return CompletedProcess(process.args, retcode, stdout, stderr)
python3.5 이전에는 call(), check_all() 및 checkoutput() 세 가지 메서드가 하위 프로세스 모듈의 고급 API를 구성했습니다.
subprocess.call()
args 매개변수로 지정된 명령이 완료될 때까지 실행하고 대기한 후 실행 상태 코드(Popen 인스턴스의 returncode 속성)를 반환합니다.
매개변수: (*popenargs, timeout=None, **kwargs). 기본적으로 Popen 생성자 매개변수와 동일하며, timeout을 제외한 모든 매개변수는 Popen 인터페이스에 전달됩니다.
call() 함수를 호출할 때 stdout=PIPE 또는 stderr=PIPE를 사용하지 마세요. 왜냐하면 자식 프로세스가 OS 파이프 버퍼를 채우기에 충분한 출력을 파이프에 생성하면 자식 프로세스가 파이프에서 데이터를 읽을 수 없기 때문에 차단되기 때문입니다. 파이프.
# 源码 def call(*popenargs, timeout=None, **kwargs): with Popen(*popenargs, **kwargs) as p: try: return p.wait(timeout=timeout) except: p.kill() p.wait() raise
subprocess.check_call()
실행하고 args 매개변수로 지정된 명령이 완료될 때까지 기다리거나, 0 상태 코드를 반환하거나 CalledProcessError 예외를 발생시킵니다. 예외의 cmd 및 returncode 속성은 명령 및 상태 코드를 볼 수 있습니다. 예외를 실행한 것입니다.
매개변수: (*popenargs, **kwargs). 모든 매개변수는 call() 함수에 전달됩니다.
참고사항은 call()
# 源码 def check_call(*popenargs, **kwargs): retcode = call(*popenargs, **kwargs) if retcode: cmd = kwargs.get("args") if cmd is None: cmd = popenargs[0] raise CalledProcessError(retcode, cmd) return 0
subprocess.check_output()
과 동일합니다. args 매개변수로 지정된 명령이 완료될 때까지 실행하고 대기한 후 표준 출력(CompletedProcess 인스턴스의 stdout 속성)을 반환합니다. 유형은 바이트 바이트이며, 바이트 인코딩이 가능합니다. 실행된 명령어에 따라 universal_newlines=True로 설정하면 문자열 유형의 값을 반환할 수 있습니다.
실행 상태 코드가 0이 아닌 경우 CalledProcessError 예외가 발생합니다.
매개변수: (*popenargs, timeout=None, **kwargs). 모든 인수는 run() 함수에 전달되지만 상위 프로세스의 표준 입력 파일 핸들을 상속하기 위해 명시적으로 input=None을 전달하는 것은 지원되지 않습니다.
반환 값에서 표준 오류를 캡처하려면 stderr=subprocess.STDOUT을 설정하세요. 표준 오류를 CalledProcessError 예외의 stderr 속성을 통해 액세스되는 stderr=subprocess.PIPE 파이프로 리디렉션할 수도 있습니다.
# 源码 def check_output(*popenargs, timeout=None, **kwargs): if 'stdout' in kwargs: raise ValueError('stdout argument not allowed, it will be overridden.') if 'input' in kwargs and kwargs['input'] is None: # Explicitly passing input=None was previously equivalent to passing an # empty string. That is maintained here for backwards compatibility. kwargs['input'] = '' if kwargs.get('universal_newlines', False) else b'' return run(*popenargs, stdout=PIPE, timeout=timeout, check=True, **kwargs).stdout
subprocess 모듈은 python2.x 버전의 Commands 모듈과 관련된 기능도 제공합니다.
subprocess.getstatusoutput(cmd)
실제로 check_output() 함수를 호출하고, 셸에서 문자열 유형 cmd 명령어를 실행하고, 출력(stderr 및 stdout 포함) 형식으로 튜플을 반환합니다. 후행 줄 바꿈이 제거된 로케일 인코딩 디코딩된 문자열입니다.
# 源码 try: data = check_output(cmd, shell=True, universal_newlines=True, stderr=STDOUT) exitcode = 0 except CalledProcessError as ex: data = ex.output exitcode = ex.returncode if data[-1:] == '\n': data = data[:-1] return exitcode, data
subprocess.getoutput(cmd)
getstatusoutput()과 유사하지만 결과는 출력만 반환합니다.
이 기사는 여기서 끝났습니다. 더 많은 흥미로운 콘텐츠를 보려면 PHP 중국어 웹사이트의 python 비디오 튜토리얼 칼럼을 주목하세요!
위 내용은 Python의 하위 프로세스 모듈 수준 메서드 소개(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!