我如何获得pexpect的sendline('ls -l')打印?

时间:2019-05-05 11:16:24

标签: python pexpect

我使用pexpect登录ssh服务器:

child = pexpect.spawn('ssh root@40.24.24.29')
child.expect('Password:')
child.sendline('admin123456#789')

child.sendline('ls -l')

我想收到ls -l命令的打印内容。

如何将结果转换为变量?

2 个答案:

答案 0 :(得分:0)

pexpect具有用于SSH会话的特殊类。参见docs

在下面复制/粘贴:

from pexpect import pxssh
import getpass
try:
    s = pxssh.pxssh()
    hostname = raw_input('hostname: ')
    username = raw_input('username: ')
    password = getpass.getpass('password: ')
    s.login(hostname, username, password)
    s.sendline('uptime')   # run a command
    s.prompt()             # match the prompt
    print(s.before)        # print everything before the prompt.
    s.sendline('ls -l')
    s.prompt()
    print(s.before)
    s.sendline('df')
    s.prompt()
    print(s.before)
    s.logout()
except pxssh.ExceptionPxssh as e:
    print("pxssh failed on login.")
    print(e)

答案 1 :(得分:0)

如果有人遇到此问题并且您根本无法获得任何输出,则可以使用 echo 来标记输出的结束。

但是,我最近尝试将进程生成为 bash,因为这里有人认为在 SSH 会话期间使用多个 .sendline() 会更好。可能不是关键,但以防万一。

child = pexpect.spawn('bash')
#Now try to SSH using sendline()

回声标记结束

child.sendline('ls -l')
child.sendline('echo ENDSIGNALHERE')
child.expect_exact('ENDSIGNALHERE')
print(child.before)