2013-05-25 3 views
0

암호 프로세스/암호를 예기치 않은 EOF가 있다고 불리는 하위 프로세스로 전달하려고합니다. 내 경우에는 udisksctl로 하드 드라이브의 암호를 해독하려고합니다. 다음은 오류가 발생한 내 시도입니다.python popen 예기치 않은 EOF 하위 프로세스

from subprocess import Popen, PIPE, STDOUT 

mykey='password' 

p = Popen(['udisksctl', 'unlock', '-b', '/dev/sdb1'], stdin=PIPE) 
p.stdin.write(mykey+"\n"); 
p.stdin.close() 

오류 :

  • 파이썬 버전 : 2.7.3
  • OS : 우분투 12.10 64 비트
  • 끝 도움

    노트 ** (udisksctl unlock:16450): ERROR **: Unexpected EOF while reading from controlling terminal.

    감사합니다 프로그램은 암호를 일반 텍스트로 저장하지 않습니다. gnome-keyring에서 읽습니다.

편집 : 나는 작업 내 프로그램을 가지고 tdelaney에

감사합니다.

import pexpect 

drive = '/dev/sdb1' 
mykey = 'password' 

child = pexpect.spawn('udisksctl unlock -b ' + drive) 
child.expect('Passphrase:') 
child.sendline(mykey) 
i = child.expect(['Unlocked ' + drive + ' as ','already unlocked as ', pexpect.EOF]) 
child.close() 

if (i > 1) : sys.exit('Could not unlock ' + drive) 

dev=(child.readline())[:-2] 
if (i == 0) : dev = dev[:-1] 
print 'Device =', dev 
+0

'stdin'을 닫지 않으려 고 시도 했습니까? – Bakuriu

+0

@Bakuriu 예. 나는 그것을 시도했다. 문제를 해결하기를 희망하면서'p.stdin.close()'줄을 추가했습니다. 그렇지 않았습니다. – shockburner

+0

@shockburner 여러 명의 리뷰 작성자가 내 답변에 귀하의 추가 사항을 거부했지만 귀하의 솔루션을 원래 게시물에 추가하는 것이 좋을 것이라고 생각합니다. – tdelaney

답변

1

암호를 요구하는 Linux 프로세스는 일반적으로 터미널 세션에서 호출되지 않으면 이상하게 작동합니다. popen 대신 python pexpect 모듈을 사용하거나 프로그램이 암호를 전달하는 다른 방법을 제공하는지 확인하십시오.

관련 문제