我正在尝试将密码短语/密码传递给子进程,但是子进程抱怨存在意外的 EOF。在我的特殊情况下,我正在尝试使用 udisksctl 解密硬盘驱动器。这是我的尝试,然后是错误。
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