이 글은 파이썬의 하위 프로세스 클래스와 상수에 대해 자세히 소개합니다. 필요한 친구들이 참고할 수 있기를 바랍니다.
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:分别指定程序执行的标准输入,标准输出,标准错误。可选值包括PIPE
,DEVNULL
,已存在的文件描述符(正整数),已存在的文件对象,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
必须包含可用的环境变量SystemRoot
bufsize:
open()
함수에 해당 매개변수로 전달합니다. 0: 버퍼링 사용 안 함 1: 라인 버퍼링 사용 기타 양의 정수: 버퍼 크기
음의 정수(기본값): 시스템 기본값 사용#🎜 🎜 #executable: shell=True가 사용되는 시나리오는 거의 없습니다. POSIX 시스템에서 shell=True인 경우 이 매개변수는 기본 쉘 /bin/sh
를 대체할 새 쉘 프로그램을 지정함을 나타냅니다.
stdin/stdout/stderr: 프로그램 실행의 표준 입력, 표준 출력, 표준 오류를 각각 지정합니다. 선택적 값에는 PIPE
, DEVNULL
, 기존 파일 설명자(양의 정수), 기존 파일 개체, 없음이 포함됩니다. 하위 프로세스 파일 핸들은 상위 프로세스에서 상속됩니다. 또한 stderr은 STDOUT
일 수도 있으며, 이는 표준 오류 출력이 표준 출력으로 리디렉션됨을 나타냅니다.
POSIX 시스템으로 제한됨, 하위 프로세스의 프로그램 이전에 실행할 호출 가능 객체를 설정합니다.
close_fds: False인 경우 파일 설명자는 파일 설명자 상속에 설명된 상속 가능
플래그를 따릅니다. True인 경우 POSIX 시스템에서는 하위 프로세스가 실행되기 전에 0, 1, 2 이외의 파일 설명자가 닫힙니다.
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)。
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模块的异常基类
子进程执行超时。
属性
cmd:指令
timeout:秒为单位的时间
output:run()
或check_output()
函数捕获到的子进程的输出,否则为None
stdout:output属性别名
stderr:run()
函数捕获到的子进程的错误输出,否则为None
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에만 해당)에 의해 종료되었음을 의미합니다.run()
함수 실행의 반환 값은 프로세스 실행이 완료되었음을 나타냅니다. Attributes
run()
함수, 목록 또는 문자열 유형에 전달된 첫 번째 매개변수 에 인코딩 또는 오류가 지정된 경우 기본값이 됩니다. run()
함수가 호출되거나 text=True로 설정된 경우 문자열 형식이 됩니다. 표준 출력이 캡처되지 않으면 없음이 반환됩니다. 🎜🎜🎜stderr: 🎜캡처된 하위 프로세스의 표준 오류, run()
시 인코딩 또는 오류가 지정된 경우 기본값은 바이트 유형입니다. > 함수가 호출되거나 텍스트가 설정됩니다. =True는 문자열 유형입니다. 표준 오류가 포착되지 않으면 None을 반환합니다. 🎜🎜Method 🎜🎜🎜check_returncode(): 🎜returncode가 0이 아닌 경우 CalledProcessError
예외 발생 🎜run()
또는 check_output()
함수 캡처 출력 그렇지 않으면 None 🎜🎜🎜stdout: 🎜출력 속성 별칭 🎜🎜🎜stderr: 🎜run()
함수에 의해 캡처된 하위 프로세스의 오류 출력, 그렇지 않으면 None🎜 subprocess.CalledProcessErrorcheck_call()
또는 check_output()
함수가 0이 아닌 상태 코드를 반환할 때 발생합니다. 🎜🎜Attributes🎜🎜🎜returncode: 🎜하위 프로세스의 종료 코드. 음수인 경우 특정 신호로 인해 프로세스가 종료되었음을 의미합니다. 🎜TimeoutExpired와 동일🎜🎜이 기사는 여기에서 끝납니다. 더 흥미로운 내용을 보려면 PHP 중국어 웹사이트의 🎜python 비디오 튜토리얼🎜 칼럼을 주목하세요! 🎜🎜🎜🎜위 내용은 Python의 하위 프로세스 클래스 및 상수에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!