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()
錯誤:** (udisksctl unlock:16450): ERROR **: Unexpected EOF while reading from controlling terminal.
感謝您的幫助
注:
- Python版本:2.7.3
- 操作系統:Ubuntu的12.10 64位
- 結束程序不會將密碼存儲爲純文本。它將從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
您是否嘗試*不*關閉'stdin'? – Bakuriu
@Bakuriu是的,我嘗試過。我添加了'p.stdin.close()'這一行,希望能解決這個問題。它沒。 – shockburner
@shockburner幾位評論家拒絕了你對我的回答的補充,但我認爲將你的解決方案添加到你原來的帖子中可以。 – tdelaney