2017-01-16 80 views
0

我正在使用pexpect将一系列命令运行到远程计算机,并希望获取每个命令的退出状态。但是,当我尝试检索退出状态时,我得到的值不正确。有没有办法使用Pexpect的pxssh来获得正确的退出状态?这里是我与输出一起尝试的代码。命令成功,但给定的退出状态为255而不是0Python Pexpect pxssh获取退出状态

from pexpect import pxssh 

try: 
    s = pxssh.pxssh(timeout=30, maxread=2000000, options={ 
        "StrictHostKeyChecking": "no", 
        "UserKnownHostsFile": "/dev/null"}) 
    hostname = 'my_hostname' 
    username = 'username' 
    password = 'my_pass' 
    s.login (hostname, username, password, port=22, auto_prompt_reset=False) 
    s.PROMPT = '*$' 

    s.sendline('uptime') 
    s.prompt() 
    print(s.before.decode('utf-8')) 
    s.close() 
    print('s exitstatus=', s.exitstatus) 

except pxssh.ExceptionPxssh as e: 
    print("pxssh failed on login.") 
    print(e) 

输出:

uptime 
09:10:39 up 10 days, 17:35, 4 users, load average: 0.12, 0.18, 0.16 

s exitstatus= 255 

回答

1

.exitstatusssh过程的退出状态。请参阅以下示例以了解如何获取在ssh会话中运行的命令的退出状态:

>>> ssh = pxssh.pxssh() 
>>> ssh.login('127.0.0.1', 'root', 'passwd') 
True 
>>> ssh.sendline('ls not-found') 
13 
>>> ssh.prompt() 
True 
>>> ssh.before 
'ls not-found\r\nls: cannot access not-found: No such file or directory\r\n' 
>>> ssh.sendline('echo $?') 
8 
>>> ssh.prompt() 
True 
>>> ssh.before 
'echo $?\r\n2\r\n' 
>>> ssh.before.split('\r\n')[1] 
'2'  <-- This is the ls command's exit status 
>>> 
+0

谢谢你,那恰好回答了我的问题。还有一个后续问题是否有一个只打印命令的输出而不是命令和输出? – MBasith

+0

1)你可以使用Python函数解析字符串; 2)在发送其他命令之前,您可以尝试sendline('stty -echo')'。将示例代码粘贴到评论中并不容易。你可以问一个新问题。 – pynexj