2013-11-22 42 views
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 

有沒有辦法將所有的東西都傳回給函數?也許我誤解了我需要從函數返回的內容才能使其工作。

回答

1

代替

logon(device) 

p=logon(deive) 

是的,你可以使用swapn返回的對象的任何地方

+0

我試過了。現在,當我做p.sendline('show clock')時,我收到錯誤AttributeError:'NoneType'對象沒有屬性'sendline' – dlyxzen

+0

@ baz00r:這應該有效。仔細檢查你的功能是否正確(使用正確的縮進和一切),以便它總是在最後碰到'return p'。 –

+0

托馬斯,它確實有效。在我改變了p = logon(device)之後,我忘了在函數中添加'return p'。現在它似乎現在工作。非常感謝。 – dlyxzen