pexpect 的 interact() 在使用 PowerCLI 的虚拟机上 运行 时报告 "Inappropriate ioctl for device"
pexpect's interact() reported "Inappropriate ioctl for device" when running on a VM with PowerCLI
我有一个简单的脚本 (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
时代码 运行 成功,但是当我使用 master.sh
调用 child.py
时,我得到以下错误:
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 的 Invoke-vmscript –vm vmname –scripttext “python child.py”
直接调用 child.py
并且仍然得到相同的行为。
关于如何解决这个问题有什么想法或建议吗?
谢谢
由于您是 运行 VM 上的 pexpect
脚本,我想您真的不需要 interact
使用它。所以只需替换
child.interact()
和
child.expect(pexpect.EOF) # also use the `timeout` argument if necessary
等待 child 完成。
根据文档,interact()
gives control of the child process to the interactive user (the human at the keyboard). Keystrokes are sent to the child process, ...
我有一个简单的脚本 (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
时代码 运行 成功,但是当我使用 master.sh
调用 child.py
时,我得到以下错误:
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 的 Invoke-vmscript –vm vmname –scripttext “python child.py”
直接调用 child.py
并且仍然得到相同的行为。
关于如何解决这个问题有什么想法或建议吗?
谢谢
由于您是 运行 VM 上的 pexpect
脚本,我想您真的不需要 interact
使用它。所以只需替换
child.interact()
和
child.expect(pexpect.EOF) # also use the `timeout` argument if necessary
等待 child 完成。
根据文档,interact()
gives control of the child process to the interactive user (the human at the keyboard). Keystrokes are sent to the child process, ...