当在具有PowerCLI的VM上运行时,pexpect的interact()报告“不适当的设备ioctl”

时间:2016-12-29 18:25:42

标签: python python-2.7 tty pexpect

我有一个简单的脚本(child.py),如下所示:

#!/usr/bin/env python
import pexpect

def ency():
    child = pexpect.spawn("cryptsetup luksChangeKey /mnt/ency")
    child.expect('Enter passphrase to be changed:')
    child.sendline('password-old')
    child.expect('Enter .*: ')
    child.sendline('password-new')
    child.expect('Verify .*: ')
    child.sendline('password-new')
    child.interact()

ency()

我使用不同的脚本(master.sh

调用此脚本
#!/bin/bash
python child.py 

我运行child.py时代码运行成功,但是当我使用child.py调用master.sh时,出现以下错误:

Traceback (most recent call last):
  File "child.py", line 15, in <module>
    ency()
  File "child.py", line 13, in ency
    child.interact()
  File "/usr/lib/python2.7/site-packages/pexpect-4.2.1-py2.7.egg/pexpect/pty_spawn.py", line 740, in interact
    mode = tty.tcgetattr(self.STDIN_FILENO)
termios.error: (25, 'Inappropriate ioctl for device')

请注意,我正在使用PowerCLI调用master.sh。我还尝试使用PowerCLI的child.py直接调用Invoke-vmscript –vm vmname –scripttext “python child.py”,但仍然会遇到相同的行为。

有关如何解决此问题的任何想法或建议?

由于

1 个答案:

答案 0 :(得分:0)

由于您在VM上运行pexpect脚本,我认为您并非真的需要interact。所以只需替换

child.interact()

child.expect(pexpect.EOF)  # also use the `timeout` argument if necessary

等待孩子完成。

根据文件interact()

  

将子进程的控制权交给交互式用户(人类键盘)。击键被发送到子进程,...