我有一个简单的脚本(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”
,但仍然会遇到相同的行为。
有关如何解决此问题的任何想法或建议?
由于
答案 0 :(得分:0)
由于您在VM上运行pexpect
脚本,我认为您并非真的需要interact
。所以只需替换
child.interact()
与
child.expect(pexpect.EOF) # also use the `timeout` argument if necessary
等待孩子完成。
根据文件interact()
将子进程的控制权交给交互式用户(人类键盘)。击键被发送到子进程,...