【发布时间】:2015-10-14 13:20:56
【问题描述】:
我有这个使用 pexpect 的 python 函数,看起来像这样:
def executeCommandWithOtherUser(command):
p = pexpect.spawn('su', ['otherUser'])
p.expect('Password:')
p.sendline('1234')
prompt = '.*$'
p.expect(prompt)
p.sendline(command)
#p.interact()
p.close()
return
当我尝试此代码时,它不会执行命令(使用例如 touch x.txt 进行测试)。如果我启用 pexpect 日志记录,我可以看到该命令,但程序完成时没有发生任何事情。如果我用 p.interact() 取消注释该行,它确实有效。但是,这会将控制权交给用户,我需要手动退出程序。
为什么函数不交互不执行命令?我该怎么做才能让它发挥作用?
【问题讨论】:
-
在命令之后添加
p.expect(prompt),等待命令完成。 -
我试过了,但行为没有改变。
-
转义提示符中的美元符号:
r'\$'(否则$是模式内的正则表达式元字符) -
感谢您的帮助。但是匹配提示真的有问题吗?如果是,程序会在每个期望(提示)上超时吗?但这似乎与不等待远程结束有关(请参阅我在匿名 pyhton hacke 的回答中的评论)。我会尝试更改提示字符串。
-
你先试试怎么样?我的猜测(我可能弄错了)是
'.*$'模式匹配 anything(包括空输入)。