2013-10-10 3 views
0

서브 프로세스 모듈을 사용하여 adb 바이너리 용 Python3에서 간단한 래퍼 모듈을 작성하고 있지만 '셸'명령은 한 번만 실행해도됩니다 명령 또는 인수없이 대화식 쉘을 실행하십시오.파이썬에서 대화 형 하위 프로세스 (예 : 셸)를 래핑하는 방법

GUI에서이 기능을 사용하기 위해 Vte와 같은 것을 사용할 수도 있지만, 내 기능이 정상적으로 돌아가는지 또는 내가 Popen을 사용해야하는지 이 인스턴스.

답변

2

파이썬에서 ADB 용 래퍼를 구현할 때 subprocess 모듈을 사용하기로 결정했습니다. 나는 check_output(...) 함수가 유용하다는 것을 알았습니다. 왜냐하면 명령이 0 상태로 리턴 될 것이기 때문입니다. check_output(...)에 의해 실행 된 명령이 0이 아닌 상태를 반환하면 CalledProcessError이 발생합니다. 특정 ADB 명령을 실행하지 못했음을 사용자에게보고하는 것보다 편리하다는 것을 알았습니다.

다음은이 방법을 구현 한 방법에 대한 스 니펫입니다. ADB wrapper의 구현을 참조하십시오.

def _run_command(self, cmd): 
    """ 
    Execute an adb command via the subprocess module. If the process exits with 
    a exit status of zero, the output is encapsulated into a ADBCommandResult and 
    returned. Otherwise, an ADBExecutionError is thrown. 
    """ 
    try: 
     output = check_output(cmd, stderr=subprocess.STDOUT) 
     return ADBCommandResult(0,output) 
    except CalledProcessError as e: 
     raise ADBProcessError(e.cmd, e.returncode, e.output) 
+0

죄송합니다. 4 년간 귀하의 답변을 보지 못했습니다. –