2010-07-07 5 views
1

저는 Virtuozzo 서버를 다루고 있으며 각 컨테이너에 대한 로그인을 자동화하고 'vzctl enter'에 대한 하위 프로세스를 작성하여 Python에서 몇 가지 명령을 실행하려고합니다. 수, 난 정말이가 BASH 오류라고 생각Virtuozzo와 Python의 하위 프로세스로 명령 자동화하기

Unable to get term attr: Invalid argument 
Unable to restore term attr: Invalid argument 

사람 - 나는 매번이 볼

#!/usr/bin/python 

import subprocess 

print 'Start' 
proc = subprocess.Popen(['vzctl enter 123'], 
          stdout=subprocess.PIPE, 
          stdin=subprocess.PIPE, 
          shell=True) 
print proc.communicate('whoami')[0] 
print 'Finished' 

그러나 출력 - 여기

내가 지금 일하고 있어요 코드 조각입니다 제안 해줘?

+0

약간의 offtopic : Popen ([ 'vzctl', 'enter', '123'], ..., shell = False)을 사용하는 것이 좋습니다. –

답변

2

vzctl처럼 stdin/stdout이 터미널이 될 것으로 예상됩니다.

$ echo whoami | vzctl enter 123 # stdin is not a tty 

$ vzctl enter 123 | cat   # stdout is not a tty 
whoami 
<ctrl-d> 

당신은 pseudottys을 만들기 위해 표준 라이브러리에서 pty 모듈을 사용할 수 있지만,이 모듈은 매우 낮은 수준이다 : 당신은 (bash는) 실험에 의해 어떤 확인할 수 있습니다.

청구서에 부합 할 수있는 pexpect이라는 제 3 자 모듈이 있습니다.

+0

첫 번째 명령에서 같은 오류가 발생했습니다. 나는 당신의 pexpect를 사용해보고 알려 드리겠습니다. 감사. – sholsapp

관련 문제