0

パスフレーズ/パスワードをサブプロセスに渡そうとしていますが、サブプロセスは予期しない 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
  • OS: 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
4

1 に答える 1

1

パスワードを要求する Linux プロセスは、ターミナル セッションから呼び出されていない場合、通常、奇妙な動作をします。popen の代わりに python pexpect モジュールを使用するか、プログラムがパスワードを渡す別の方法を提供しているかどうかを確認してください。

于 2013-05-25T19:14:59.623 に答える