>  기사  >  백엔드 개발  >  Python의 하위 프로세스 클래스 및 상수에 대한 자세한 소개

Python의 하위 프로세스 클래스 및 상수에 대한 자세한 소개

不言
不言앞으로
2019-03-29 10:57:212494검색

이 글은 파이썬의 하위 프로세스 클래스와 상수에 대해 자세히 소개합니다. 필요한 친구들이 참고할 수 있기를 바랍니다.

Constant

subprocess.DEVNULL: stdin, stdout, stderr 매개변수에 전달할 수 있는 특수 값. 즉, 특수 값을 사용하여 입력 및 출력이 리디렉션됨을 의미합니다. file os.devnull#🎜🎜 #

subprocess.PIPE: stdin, stdout, stderr 매개변수에 전달할 수 있는 특수 값. 이는 파이프를 사용하여 입력 및 출력을 리디렉션하는 것을 의미합니다.

subprocess .STDOUT: 표준 오류를 표준 출력으로 리디렉션하는 것을 나타내는 stderr 매개 변수에 전달할 수 있는 특수 값

Popen

새 프로세스에서 서브루틴을 실행합니다.

구성 매개변수

(args, bufsize=-1, 실행 가능=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=True, shell=False, cwd=None, env=None, universal_newlines=None, Startupinfo=None, Creationflags=0, Restore_signals=True, start_new_session=False, pass_fds=(), *, 인코딩=None, 오류=None , text=없음)

args: 문자열 또는 시퀀스. 시퀀스인 경우 args의 첫 번째 요소는 실행될 프로그램이고, 문자열인 경우 해석은 플랫폼에 따라 다릅니다. POSIX 시스템에서 args는 실행될 프로그램의 이름 또는 경로로 해석됩니다. (단, 프로그램에 매개변수가 전달되지 않은 경우)

shell: 실행할 프로그램으로 쉘을 사용할지 여부를 지정합니다. True로 설정하면 문자열 형식의 args 매개변수를 사용하는 것이 더 좋습니다. POSIX 시스템에서 shell=True는 기본적으로 /bin/sh를 셸로 사용합니다. args가 문자열인 경우 문자열은 셸을 통해 실행될 명령을 나타냅니다. args가 시퀀스인 경우 첫 번째 요소는 실행될 프로그램을 지정하고 다른 요소는 매개변수로 처리됩니다.
Windows 시스템에서 shell=True는 기본적으로 COMSPEC 환경 변수에 지정된 셸(일반적으로 C:WINDOWSsystem32cmd.exe)을 사용합니다. shell=True를 지정해야 하는 유일한 시나리오는 실행할 명령이 dir, copy와 같이 셸에 내장되어 있는 경우입니다. /bin/sh作为shell。如果args为字符串,该字符串表示要通过shell执行的命令;如果args为序列,第一个元素指定要执行的程序,其他元素视为参数。
在Windows系统,shell=True默认使用COMSPEC环境变量指定的shell,一般是C:WINDOWSsystem32cmd.exe。唯一需要指定shell=True的场景是要执行的指令是shell内置的,如dir, copy

bufsize:创建stdin/stdout/stderr管道文件对象时作为对应的参数传递给open()函数。
0:不始用缓冲
1:使用行缓冲
其他正整数:缓冲大小
负整数(默认):使用系统默认值

executable:使用shell=True的场景很少。shell=True时,在POSIX系统上此参数表示指定一个新的shell程序替换默认shell/bin/sh

stdin/stdout/stderr:分别指定程序执行的标准输入,标准输出,标准错误。可选值包括PIPEDEVNULL,已存在的文件描述符(正整数),已存在的文件对象,None。子进程文件句柄继承自父进程。除此之外,stderr还可以是STDOUT,表示标准错误输出重定向到标准输出。

preexec_fn:限于POSIX系统,设置一个可调用对象,先于子进程中的程序执行。

close_fds:如果为False,文件描述符遵循Inheritance of File Descriptors中描述的inheritable标识。
如果为True,在POSIX系统下,在子进程执行前关闭除0,1,2外的文件描述符。

pass_fds:限于POSIX,可选的文件描述符序列,用于在父子进程间保持开放。只要提供了此参数,close_fds强制设为True。

cwd:在子进程执行前改变工作目录为cwd,可以是字符串或path-like对象。

restore_signals:限于POSIX,略

start_new_session:限于POSIX,略

env:dict对象,为新进程定义环境变量,替换继承自父进程的变量。在Windows下,要运行side-by-side assembly必须包含可用的环境变量SystemRootbufsize:

stdin/stdout/stderr 파이프 파일 객체를 생성할 때 이를 open() 함수에 해당 매개변수로 전달합니다.

0: 버퍼링 사용 안 함 1: 라인 버퍼링 사용 기타 양의 정수: 버퍼 크기

음의 정수(기본값): 시스템 기본값 사용

#🎜 🎜 #executable: shell=True가 사용되는 시나리오는 거의 없습니다. POSIX 시스템에서 shell=True인 경우 이 매개변수는 기본 쉘 /bin/sh를 대체할 새 쉘 프로그램을 지정함을 나타냅니다.

stdin/stdout/stderr: 프로그램 실행의 표준 입력, 표준 출력, 표준 오류를 각각 지정합니다. 선택적 값에는 PIPE, DEVNULL, 기존 파일 설명자(양의 정수), 기존 파일 개체, 없음이 포함됩니다. 하위 프로세스 파일 핸들은 상위 프로세스에서 상속됩니다. 또한 stderr은 STDOUT일 수도 있으며, 이는 표준 오류 출력이 표준 출력으로 리디렉션됨을 나타냅니다.

preexec_fn:

POSIX 시스템으로 제한됨, 하위 프로세스의 프로그램 이전에 실행할 호출 가능 객체를 설정합니다.

close_fds:

False인 경우 파일 설명자는 파일 설명자 상속에 설명된 상속 가능 플래그를 따릅니다. True인 경우 POSIX 시스템에서는 하위 프로세스가 실행되기 전에 0, 1, 2 이외의 파일 설명자가 닫힙니다.

#🎜🎜#pass_fds: #🎜🎜# 상위 프로세스와 하위 프로세스 간에 열린 상태를 유지하는 데 사용되는 선택적 파일 설명자 시퀀스인 POSIX로 제한됩니다. 이 매개변수가 제공될 때마다 close_fds는 강제로 True로 설정됩니다. #🎜🎜##🎜🎜##🎜🎜#cwd: #🎜🎜#자식 프로세스가 실행되기 전에 작업 디렉터리를 cwd로 변경합니다. 하위 프로세스는 문자열이거나 경로류 개체일 수 있습니다. #🎜🎜##🎜🎜##🎜🎜#restore_signals: #🎜🎜#POSIX로 제한됨, 약간 #🎜🎜##🎜🎜##🎜🎜#start_new_session: #🎜🎜#POSIX로 제한됨, 약간 #🎜🎜# #🎜 🎜##🎜🎜#env: #🎜🎜#dict 개체는 새 프로세스에 대한 환경 변수를 정의하고 상위 프로세스에서 상속된 변수를 대체합니다. Windows에서 side-by-side 어셈블리를 실행하려면 사용 가능한 환경 변수 SystemRoot를 포함해야 합니다. #🎜🎜#env가 지정되면 프로그램 실행이 의존하는 모든 환경 변수가 제공되어야 합니다. #🎜🎜##🎜🎜##🎜🎜##🎜🎜#encoding/errors/text/universal_newlines:#🎜🎜#stdin /stdout /stderr은 기본적으로 바이너리 모드로 열립니다. 그러나 인코딩/오류가 지정되거나 텍스트가 True인 경우 stdin/stdout/stderr은 지정된 인코딩 및 오류를 사용하여 텍스트 모드에서 열립니다. universal_newlines 매개변수는 텍스트와 동일하며 이전 버전과의 호환성을 위해 사용됩니다. #🎜🎜##🎜🎜##🎜🎜#startupinfo: #🎜🎜# Windows 전용, 약간 #🎜🎜##🎜🎜##🎜🎜#creationflags: #🎜🎜# Windows 전용, 약간 #🎜🎜# #🎜 🎜#Method#🎜🎜##🎜🎜##🎜🎜#poll(): #🎜🎜# 하위 프로세스가 종료되었는지 확인하세요. 종료되지 않았음을 나타내려면 None을 반환하고, 그렇지 않으면 returncode 속성을 설정하고 반환합니다. #🎜🎜##🎜🎜##🎜🎜#wait(timeout=None): #🎜🎜#시간 초과 후에도 하위 프로세스가 종료되지 않으면 TimeoutExpired 예외가 발생합니다. 그렇지 않으면 returncode 속성을 설정하고 반환합니다. #🎜🎜#

communicate(input=None, timeout=None): 프로세스 상호 작용: stdin으로 데이터를 보내고, 끝 문자를 읽을 때까지 stdout 또는 stderr의 데이터를 읽습니다. (stdout_data, stderr_data) 형식의 튜플을 반환합니다. 튜플 유형은 문자열 또는 바이트입니다.
입력은 None이거나 하위 프로세스로 전송될 데이터이며, 스트림 열기 모드에 따라 문자열 또는 바이트 유형이 될 수 있습니다.
프로세스의 stdin과 상호 작용하려면 Popen 객체를 생성할 때 stdin=PIPE를 지정해야 합니다. 마찬가지로, 반환된 튜플을 None이 아니게 하려면 stdout=PIPE 및/또는 stderr=PIPE를 설정해야 합니다.
시간 초과 후에도 하위 프로세스가 종료되지 않으면 TimeoutExpired 예외가 발생하지만 하위 프로세스는 종료되지 않습니다. 좋은 애플리케이션은 하위 프로세스를 종료하고 상호 작용을 종료해야 합니다.

proc = subprocess.Popen(...)
try:
    outs, errs = proc.communicate(timeout=15)
except TimeoutExpired:
    proc.kill()
    outs, errs = proc.communicate()

send_signal(signal): Send a 자식 프로세스에 신호

terminate(): 자식 프로세스를 종료합니다. POSIX 시스템에서는 SIGTERM 신호를 하위 프로세스로 보냅니다. Windows 시스템에서는 TerminateProcess()가 호출되어 프로세스를 종료합니다

kill():하위 프로세스를 강제로 종료합니다. POSIX 시스템에서는 SIGKILL 신호를 하위 프로세스로 보냅니다. kill()은 Windows 시스템에서 종료()의 별칭입니다.

속성

args: Popen 생성자, 목록 또는 문자열 유형의 첫 번째 매개변수 전달 Popen构造器的第一个参数,list或string类型

stdin:如果传递给Popen的stdin参数是PIPE,该属性表示string或byte类型的可写stream对象。如果传递给Popen的stdin参数不是PIPE,此属性值为None

stdout:与Popen.stdin相近,但stream对象是可读的

stderr:与Popen.stdout相近

pid:子进程进程号。如果设置了shell=True,pid表示派生shell的进程号

returncode:子进程返回码,None表示进程未终止。负数-N表示进程被信号N终止(仅限POSIX)。

CompletedProcess

run()函数运行的返回值,表示进程执行完成。

属性

args:传入run()函数的第一个参数,list或string类型

returncode:子进程退出码。如果为负数,表示进程因为某个信号退出

stdout:捕获的子进程的标准输出,默认为byte类型,如果run()函数调用时指定了encoding或errors,或设置了text=True则为string类型。如果未捕获标准输出返回None

stderr:捕获的子进程的标准错误,默认为byte类型,如果run()函数调用时指定了encoding或errors,或设置了text=True则为string类型。如果未捕获标准错误返回None

方法

check_returncode():如果returncode非0,抛出CalledProcessError异常

异常

subprocess.SubprocessError

subprocess模块的异常基类

subprocess.TimeoutExpired

子进程执行超时。

属性

cmd:指令

timeout:秒为单位的时间

output:run()check_output()函数捕获到的子进程的输出,否则为None

stdout:output属性别名

stderr:run()函数捕获到的子进程的错误输出,否则为None

subprocess.CalledProcessError

check_call()check_output()

stdin:
if Popen에 전달된 stdin 매개변수는 PIPE이며, 이는 문자열 또는 바이트 유형의 쓰기 가능한 스트림 개체를 나타냅니다. Popen에 전달된 stdin 매개변수가 PIPE가 아닌 경우 이 속성의 값은 None입니다.

stdout:

는 Popen.stdin과 유사하지만 스트림 개체를 읽을 수 있습니다.

stderr:

는 Popen.stdout과 유사합니다.

pid:

자식 프로세스의 프로세스 번호입니다. shell=True가 설정된 경우 pid는 파생된 쉘의 프로세스 번호를 나타냅니다.

returncode:

child 프로세스 반환 코드, None은 프로세스가 종료되지 않았음을 의미합니다. 음수 -N은 프로세스가 신호 N(POSIX에만 해당)에 의해 종료되었음을 의미합니다.

CompletedProcess

run()함수 실행의 반환 값은 프로세스 실행이 완료되었음을 나타냅니다. Attributes

args:

run() 함수, 목록 또는 문자열 유형에 전달된 첫 번째 매개변수


returncode: 🎜하위 프로세스 종료 코드. 음수인 경우 특정 신호로 인해 프로세스가 종료되었음을 의미합니다🎜🎜🎜stdout:🎜 캡처된 하위 프로세스의 표준 출력으로, 에 인코딩 또는 오류가 지정된 경우 기본값이 됩니다. run() 함수가 호출되거나 text=True로 설정된 경우 문자열 형식이 됩니다. 표준 출력이 캡처되지 않으면 없음이 반환됩니다. 🎜🎜🎜stderr: 🎜캡처된 하위 프로세스의 표준 오류, run()시 인코딩 또는 오류가 지정된 경우 기본값은 바이트 유형입니다. > 함수가 호출되거나 텍스트가 설정됩니다. =True는 문자열 유형입니다. 표준 오류가 포착되지 않으면 None을 반환합니다. 🎜🎜Method 🎜🎜🎜check_returncode(): 🎜returncode가 0이 아닌 경우 CalledProcessError 예외 발생 🎜

Exception

subprocess.SubprocessError🎜하위 프로세스 모듈의 예외 기본 클래스🎜

subprocess.TimeoutExpired

🎜하위 프로세스 실행 시간 초과입니다. 🎜🎜Attributes🎜🎜🎜cmd: 🎜Command 🎜🎜🎜timeout: 🎜초 단위 시간 🎜🎜🎜output: 🎜run() 또는 check_output() 함수 캡처 출력 그렇지 않으면 None 🎜🎜🎜stdout: 🎜출력 속성 별칭 🎜🎜🎜stderr: 🎜run() 함수에 의해 캡처된 하위 프로세스의 오류 출력, 그렇지 않으면 None🎜 subprocess.CalledProcessError🎜 check_call() 또는 check_output() 함수가 0이 아닌 상태 코드를 반환할 때 발생합니다. 🎜🎜Attributes🎜🎜🎜returncode: 🎜하위 프로세스의 종료 코드. 음수인 경우 특정 신호로 인해 프로세스가 종료되었음을 의미합니다. 🎜TimeoutExpired와 동일🎜🎜이 기사는 여기에서 끝납니다. 더 흥미로운 내용을 보려면 PHP 중국어 웹사이트의 🎜python 비디오 튜토리얼🎜 칼럼을 주목하세요! 🎜🎜🎜🎜

위 내용은 Python의 하위 프로세스 클래스 및 상수에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제