Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python在子进程中出现意外的EOF_Python_Python 2.7_Subprocess_Stdin - Fatal编程技术网

python在子进程中出现意外的EOF

python在子进程中出现意外的EOF,python,python-2.7,subprocess,stdin,Python,Python 2.7,Subprocess,Stdin,我试图将密码短语/密码传递到子流程中,但是子流程抱怨出现意外的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() 错误

我试图将密码短语/密码传递到子流程中,但是子流程抱怨出现意外的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解锁:16450):错误**:从控制终端读取时发生意外EOF。

谢谢你的帮助

注:

  • Python版本:2.7.3
  • 操作系统:Ubuntu 12.10 64位
  • 终端程序不会将密码存储为纯文本。它将从gnome钥匙圈中读取
编辑:

多亏了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

请求密码的Linux进程在没有从终端会话调用时通常表现得很奇怪。使用python pexpect模块而不是popen,或者检查程序是否提供了不同的密码传递方式。

是否尝试不关闭stdin?@Bakuriu是的,我尝试过。我添加了
p.stdin.close()
行,希望它能解决这个问题。“没有,”shockburner几位评论员拒绝了你对我答案的补充,但我认为将你的解决方案添加到你原来的帖子中是可以的。