我正在使用paramiko for ssh并等待检查以字符串结尾的提示。
实际以字符串结尾如下:
RP/0/RSP0/CPU0:asr1#
我在代码中用来检查endwith是
#
下面是代码:
import paramiko
import re
import time
hostname = "10.10.10.10"
net_username = "user"
net_password = "password"
remote_conn_pre = paramiko.SSHClient()
remote_conn_pre.set_missing_host_key_policy(
paramiko.AutoAddPolicy())
remote_conn_pre.connect(hostname, username=net_username, password=net_password,look_for_keys=False, allow_agent=False)
remote_conn = remote_conn_pre.invoke_shell()
buff = ''
while not buff.endswith('#'):
resp = remote_conn.recv(9999)
buff += resp
print(resp)
remote_conn.send("\n")
buff = ''
while not buff.endswith('#'):
resp = remote_conn.recv(9999)
buff += resp
print(resp)
remote_conn.send("ping 172.16.35.22\n")
time.sleep(2)
buff = ''
while not buff.endswith('#'):
resp = remote_conn.recv(9999)
buff += resp
print resp
一切正常,即使我用“#”检查结束,但我想在这里仔细检查。我正在以正确的方式行事,还是我们还有其他更好的选择来实现这一目标
我的意思是以字符串“RP / 0 / RSP0 / CPU0:asr1#”结尾。
"RP/" is constant
如何使用匹配
"RP/anything#"
答案 0 :(得分:0)
如果您想使用python' regular expression module来增强搜索效果:
您必须使用re.match
将正则表达式与字符串匹配:
re.match(pattern,string,flags = 0)
如果字符串开头的零个或多个字符与正则表达式模式匹配,则返回相应的MatchObject实例。如果字符串与模式不匹配,则返回None;请注意,这与零长度匹配不同。
请注意,即使在MULTILINE模式下,re.match()也只会匹配字符串的开头而不是每行的开头。
如果要在字符串中的任何位置找到匹配项,请改用search()(另请参阅search()与match())。
您的问题有一个例子:
import re # module for regular expression
string = "RP/0/RSP0/CPU0:asr1#"
match = re.match(r"^RP/[(\d|\w)|(/|:)]*#{1}$", string)
if (match):
# The string match with the regular expression
else:
# The string doesn't match the regular expression
如果您不知道如何使用正则表达式并希望练习它们,则可以使用此网站:regex101.com。该网站还有用于正则表达式的python模块。