我正在尝试从run.py执行client.py. client.py提示输入。我写了一个简单的pexpect代码,但它并不匹配提示并挂起。
这是我的代码
input = raw_input("Please data, default [ /Anything ]:\n")
if input == "Admin":
print "Welcome Admin"
else:
print "Welcom Guest"
import pexpect
child = pexpect.spawn ('python client.py')
child.expect('Please data, default [ /Anything ]:\n')
child.sendline ('anonymous')
这是另一个使用expect_exact的尝试,它对我没有帮助..
import pexpect
child = pexpect.spawn ('python client.py')
child.expect_exact('Please data, default [ /Anything ]:\n')
child.sendline ('anonymous')
Python 2.7.2 (default, May 13 2014, 12:53:14)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pexpect
>>> pexpect.__version__
'3.2'
>>>
答案 0 :(得分:3)
您可能希望使用expect_exact
而不是expect
,因为后面的方法需要正则表达式,其中[
是一个特殊字符。
答案 1 :(得分:2)
问题是你的\n
字符。正如here所解释的那样。您正在发送\n
,但 pexpect 将其视为\r\n
,因此您必须告诉run.py
预期\r\n
而非\n
1}}:
import pexpect
child = pexpect.spawn ('python client.py')
child.expect_exact('Please data, default [ /Anything ]:\r\n')
child.sendline ('anonymous')
保持client.py
不变(不要将\r
添加到raw_input
字符串中。)
答案 2 :(得分:0)
您可以在pexpect中拥有Anything
,然后继续使用您的代码。
child.pexpect('Anything')