2012-05-31 5 views
2

외부 프로그램을 실행하기 위해 Python을 사용하고 있습니다. 파이썬이 호출 된 프로그램에 키 입력을 보내 자동 로그인을 완료하기를 바란다.외부 프로그램에 입력을 전달하고 전달하는 방법

문제는 외부 프로그램을 실행하기 위해 subprocess.call()을 사용할 때 프로그램이 시스템 포커스를 얻었고 Python 스크립트가 외부 프로그램을 닫을 때까지 응답하지 못했습니다.

의견이 있으십니까? 고마워.

답변

6

사용 subprocess.Popen() 대신 Popen으로 .call()

의 당신은 아마도 외부 프로그램과 상호 작용할 수 있도록 또한, 표준 입력, 표준 출력표준 에러 파일 기술자를 제어 할 수 있습니다.

바보 예 :

s = subprocess.Popen(command, stdout=subprocess.PIPE, 
        stderr=subprocess.PIPE) # The script is not blocked here 

# Wait to finish 
while s.poll() is None: # poll() checks if process has finished without blocking 
    time.sleep(1) 
    ... # do something 

# Another way to wait 
s.wait() # This is blocking 

if s.returncode == 0: 
    print "Everything OK!" 
else: 
    print "Oh, it was an error" 

몇 가지 유용한 방법 : 자식 프로세스가 종료 된 경우

Popen.poll는()에서 확인하십시오. returncode 속성을 설정하고 반환하십시오.

Popen.wait() 하위 프로세스가 종료 될 때까지 대기합니다. returncode 속성을 설정하고 반환하십시오.

Popen.communicate (입력 = 없음) 프로세스와 상호 작용 : 데이터를 stdin으로 보냅니다. 파일 끝에 도달 할 때까지 stdout 및 stderr에서 데이터를 읽습니다. 프로세스가 종료 될 때까지 기다립니다. 선택적 입력 인수는 하위 프로세스에 보낼 문자열 이거나 자식에게 보낸 데이터가 없으면이어야합니다.

더 많은 정보를 원하시면 in the docs

+0

그러나 내가 어떻게 외부 응용 프로그램에서 텍스트 입력을받을 수 있습니까? –

관련 문제