>  기사  >  백엔드 개발  >  Python 2.x에서 하위 프로세스 관리를 위해 하위 프로세스 모듈을 사용하는 방법

Python 2.x에서 하위 프로세스 관리를 위해 하위 프로세스 모듈을 사용하는 방법

PHPz
PHPz원래의
2023-07-30 10:07:581113검색

Python 2.x에서 하위 프로세스 관리를 위해 하위 프로세스 모듈을 사용하는 방법

개요:
Python 개발에서는 프로그램에서 다른 외부 명령이나 프로그램을 호출해야 하는 경우가 있습니다. 서브프로세스 모듈은 파이썬에서 제공하는 표준 라이브러리로, 서브프로세스를 쉽게 생성하고 통신할 수 있습니다. 이 기사에서는 하위 프로세스 관리를 위해 하위 프로세스 모듈을 사용하는 방법을 소개하고 코드 예제를 통해 설명합니다.

  1. 하위 프로세스 생성:
    subprocess 모듈에서 가장 일반적으로 사용되는 함수는 subprocess.Popen()으로, 새 프로세스를 시작하고 Popen 개체를 반환할 수 있습니다. 하위 프로세스를 생성하기 위해 Popen() 함수를 사용하는 기본 구문은 다음과 같습니다. subprocess.Popen(),它能够启动一个新进程并返回一个Popen对象。使用Popen()函数创建子进程的基本语法如下:
import subprocess

subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, 
                 close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, 
                 creationflags=0)

参数说明:

  • args: 字符串或者序列类型的命令行参数
  • bufsize: 控制输入输出缓冲大小的参数,0代表不缓冲,1代表行缓冲,其他正数代表缓冲区大小
  • executable: 可执行文件的路径,默认使用系统PATH环境变量中的搜索路径
  • stdin: 子进程的标准输入流,默认为PIPE,即通过Popen对象的stdin属性进行输入
  • stdout: 子进程的标准输出流,默认为PIPE,即通过Popen对象的stdout属性进行输出
  • stderr: 子进程的标准错误流,默认为PIPE,即通过Popen对象的stderr属性进行输出
  • preexec_fn: 一个将在子进程启动之前被调用的可执行对象
  • close_fds: 是否关闭不再需要的文件描述符,默认为False
  • shell: 是否通过shell进行命令解析,默认为False
  • cwd: 工作目录,默认为None
  • env: 环境变量,默认为None,即使用父进程的环境变量
  • universal_newlines: 控制输入输出是否转换为文本模式,默认为False
  • startupinfo: 子进程的启动信息,默认为None
  • creationflags: 子进程的创建标记,默认为0

示例代码1:启动一个子进程并执行命令,然后获取子进程的输出结果。

import subprocess

cmd = "ls -l"
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
output, _ = p.communicate()
print(output)
  1. 子进程的输入输出:
    在创建子进程时,我们可以通过Popen()函数的stdin、stdout、stderr参数来指定子进程的输入输出。如果不指定这些参数,默认会创建一个新的管道并通过Popen对象的属性来读写。

示例代码2:启动一个子进程并通过管道进行输入、输出。

import subprocess

cmd = "grep -E 'a|b|c'"
p = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE)
input_data = "abcdefg
hijklmnop
qrstuvwxyz
"
output, _ = p.communicate(input_data)
print(output)

示例代码3:启动一个子进程并重定向输出到文件中。

import subprocess

cmd = "grep -E 'a|b|c' input.txt > output.txt"
subprocess.Popen(cmd, shell=True)
  1. 等待子进程结束:
    子进程的执行是异步的,默认情况下,Popen()函数会立即返回一个Popen对象,而不会等待子进程执行完毕。如果我们需要等待子进程执行完毕后再进行下一步操作,可以使用Popen()对象的wait()方法。

示例代码4:启动一个子进程并等待其执行完毕。

import subprocess

cmd = "ls -l"
p = subprocess.Popen(cmd, shell=True)
p.wait()
print("子进程执行完毕")
  1. 捕获子进程的退出状态码:
    每个子进程都会有一个退出状态码,代表其执行结果。可以使用Popen()对象的returncode
  2. import subprocess
    
    cmd = "ls -l"
    p = subprocess.Popen(cmd, shell=True)
    p.wait()
    if p.returncode == 0:
        print("子进程执行成功")
    else:
        print("子进程执行失败")
매개변수 설명:

    args: 문자열 또는 시퀀스 유형의 명령줄 매개변수


    bufsize : 입력 및 출력 제어 버퍼 크기의 매개 변수, 0은 버퍼링 없음, 1은 라인 버퍼링, 기타 양수는 버퍼 크기를 나타냅니다.

    executable: 실행 파일의 경로, 시스템 PATH 환경 변수의 검색 경로가 사용됩니다. 기본적으로

    🎜stdin: 하위 프로세스 입력 스트림의 표준, 기본값은 PIPE이며 Popen 객체의 stdin 속성을 통해 입력됩니다. 🎜🎜stdout: 하위 프로세스의 표준 출력 스트림으로 기본값은 PIPE입니다. 이는 Popen 객체의 stdout 속성을 통해 출력됩니다. 🎜🎜stderr: 하위 프로세스의 표준 오류 스트림, 기본값은 Popen 객체의 stderr 속성을 통해 출력되는 PIPE입니다. 🎜🎜preexec_fn: 실행 가능한 객체입니다. 하위 프로세스가 시작되기 전에 호출됩니다. 🎜🎜close_fds: 더 이상 필요하지 않은 파일 설명자를 닫을지 여부, 기본값은 False🎜🎜 셸: 셸을 통해 명령 구문 분석을 수행할지 여부, 기본값은 False 🎜🎜cwd: 작업 디렉토리, 기본값은 None 🎜🎜env: 환경 변수, 기본값은 None, 즉 상위 프로세스의 환경 변수가 사용됩니다. 🎜🎜universal_newlines: 입력 및 출력을 텍스트 모드로 변환할지 여부를 제어하며 기본값은 False🎜🎜startupinfo: 하위 프로세스의 시작 정보, 기본값은 None🎜🎜creationflags: 하위 프로세스의 생성 플래그, 기본값은 0🎜
🎜샘플 코드 1: 하위 프로세스를 시작하고 실행합니다. 명령을 내린 다음 하위 프로세스의 출력을 가져옵니다. 🎜rrreee
    🎜하위 프로세스의 입력 및 출력: 🎜하위 프로세스를 생성할 때 Popen()의 stdin, stdout 및 stderr 매개변수를 통해 하위 프로세스를 지정할 수 있습니다. 함수 입력 출력. 이러한 매개변수를 지정하지 않으면 기본적으로 새 파이프가 생성되고 Popen 개체의 속성을 통해 읽고 쓰여집니다. 🎜🎜🎜샘플 코드 2: 하위 프로세스를 시작하고 파이프를 통해 입력 및 출력을 수행합니다. 🎜rrreee🎜샘플 코드 3: 하위 프로세스를 시작하고 출력을 파일로 리디렉션합니다. 🎜rrreee
      🎜하위 프로세스가 끝날 때까지 기다리세요: 🎜하위 프로세스의 실행은 기본적으로 비동기식입니다. Popen() 함수는 Popen을 반환합니다. 자식 프로세스가 실행을 완료할 때까지 기다리는 대신 즉시 개체를 생성합니다. 다음 단계로 진행하기 전에 하위 프로세스의 실행이 완료될 때까지 기다려야 하는 경우 Popen() 개체의 wait() 메서드를 사용할 수 있습니다. 🎜🎜🎜샘플 코드 4: 하위 프로세스를 시작하고 실행이 완료될 때까지 기다립니다. 🎜rrreee
        🎜하위 프로세스의 종료 상태 코드 캡처: 🎜각 하위 프로세스에는 실행 결과를 나타내는 종료 상태 코드가 있습니다. Popen() 객체의 returncode 속성을 ​​사용하여 하위 프로세스의 종료 상태 코드를 얻을 수 있습니다. 0이면 실행이 성공한 것입니다. 🎜🎜🎜샘플 코드 5: 하위 프로세스의 종료 상태 코드를 가져옵니다. 🎜rrreee🎜요약: 🎜subprocess 모듈을 통해 Python 프로그램에서 쉽게 하위 프로세스를 만들고 프로세스를 관리할 수 있습니다. 구체적인 작업 방법에는 자식 프로세스 생성, 자식 프로세스의 입력 및 출력 제어, 자식 프로세스 종료 대기, 자식 프로세스의 종료 상태 코드 캡처 등이 포함됩니다. 이 지식을 익히면 하위 프로세스 관리를 위해 Python을 더 잘 활용하고 프로그램의 유연성과 확장성을 향상시킬 수 있습니다. 🎜🎜위 내용은 Python 2.x에서 하위 프로세스 관리를 위해 하위 프로세스 모듈을 사용하는 것과 관련된 내용입니다. 도움이 되었기를 바랍니다. 🎜

위 내용은 Python 2.x에서 하위 프로세스 관리를 위해 하위 프로세스 모듈을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.