Programing

Popen 하위 프로세스와 호출의 차이점은 무엇인가(어떻게 사용할 수 있는가?

c10106 2022. 4. 1. 00:46
반응형

Popen 하위 프로세스와 호출의 차이점은 무엇인가(어떻게 사용할 수 있는가?

파이썬에서 외부 프로그램에 전화하고 싶어.나는 두 가지 모두를 사용해 왔다.Popen()그리고call()그러기 위해서

그 둘의 차이점은 무엇인가?

나의 구체적인 목표는 파이썬에서 다음 명령을 실행하는 것이다.나는 어떻게 리디렉션되는지 잘 모르겠다.

./my_script.sh > output

서류를 읽어보니 이렇게 적혀 있다.call()편의 기능 또는 바로 가기 기능이다.사용으로 인해 전력이 손실되는가?call()대신에Popen()?

리디렉션을 수행하는 두 가지 방법이 있다.둘 다 다음 중 하나에 적용된다.subprocess.Popen또는subprocess.call.

  1. 키워드 인수 설정shell = True또는executable = /path/to/the/shell명령어를 거기 있는 그대로 명시하십시오.

  2. 출력을 파일로 리디렉션하는 중이므로 키워드 인수를 설정하십시오.

    stdout = an_open_writeable_file_object
    

    물체가 가리키는 곳output파일

subprocess.Popen 보다 일반적이다

Popen프로세스가 실행되는 동안 프로세스와 상호 작용하거나 Python 프로그램에서 다른 작업을 계속할 수 있도록 차단하지 마십시오.로의 호출.Popena를 반환하다Popen이의를 제기하다

call 차단을 한다.모든 동일한 인수를 지원하는 반면Popen생성자: 프로세스의 출력, 환경 변수 등을 설정할 수 있으며 스크립트는 프로그램이 완료될 때까지 기다리며call프로세스의 종료 상태를 나타내는 코드를 반환한다.

returncode = call(*args, **kwargs) 

기본적으로 전화하는 것과 같다.

returncode = Popen(*args, **kwargs).wait()

call단지 편의 기능일 뿐이다.CPython에서의 구현은 하위 프로세스에 있다.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.

다른 답은 매우 완벽하지만, 여기 경험 법칙이 있다.

  • call차단 중:

    call('notepad.exe')
    print('hello')  # only executed when notepad is closed
    
  • Popen비필수:

    Popen('notepad.exe')
    print('hello')  # immediately executed
    

참조URL: https://stackoverflow.com/questions/7681715/whats-the-difference-between-subprocess-popen-and-call-how-can-i-use-them

반응형