0
我正在使用python pexpect模塊登錄到網絡設備。我已經將所需的代碼放入函數中並且它可以成功運行,但是在完成函數之後,我想繼續在腳本中使用該實例。我不知道我需要從函數中返回這個工作。從函數返回Pexpect Spawn實例
功能
def logon(device):
p = pexpect.spawn('ssh [email protected]' + device, timeout=10)
x = p.expect (['yes/no','password:'])
if x==0:
p.sendline('yes')
y = p.expect(['password:'])
if y==0:
p.sendline(PW)
z = p.expect(['#'])
if z==0:
print('Successfully logged onto ' + device)
else:
print('Failed to log onto device ' + device)
if x==1:
p.sendline(PW)
z = p.expect(['#'])
if z==0:
print('Successfully logged onto ' + device)
else:
print('Failed to log onto device ' + device)
else:
print('Failed to log onto device ' + device)
return p
logon(device)
p.sendline('show clock')
p.expect('#')
功能按預期工作,我收到消息「成功登錄到設備」,我想傳遞「P」值回,讓我繼續與Pexpect的實例工作。但我收到以下錯誤。
p.sendline('show clock')
NameError: name 'p' is not defined
有沒有辦法將所有的東西都傳回給函數?也許我誤解了我需要從函數返回的內容才能使其工作。
我試過了。現在,當我做p.sendline('show clock')時,我收到錯誤AttributeError:'NoneType'對象沒有屬性'sendline' – dlyxzen
@ baz00r:這應該有效。仔細檢查你的功能是否正確(使用正確的縮進和一切),以便它總是在最後碰到'return p'。 –
托馬斯,它確實有效。在我改變了p = logon(device)之後,我忘了在函數中添加'return p'。現在它似乎現在工作。非常感謝。 – dlyxzen