【问题标题】:Execute multiple commands with pexpect使用 pexpect 执行多个命令
【发布时间】:2014-09-26 10:20:03
【问题描述】:

我正在使用 pexpect 与服务器建立 ssh 连接。服务器的登录 shell 不是 bash。我想用一个连接执行多个命令。我尝试了 sendline() 但它不会将其视为仅输入文本的命令。所以也许我需要一种通过 pexpect 发送“Enter”信号的方法。 下一个用例是从某些目录执行命令,所以我首先必须去那里执行命令。 有什么办法吗?或者有没有更好的方法通过密码验证在远程服务器上执行多个命令?

【问题讨论】:

  • fabric
  • 我找不到关于如何为 fabric.they 提供密码的 python 代码。他们只是说有 --password 选项。如果有的话请提供
  • 如果您在 google 中搜索“结构密码”会发生什么?
  • fab 从 1.7 版开始不支持通过 env 变量进行密码验证。并且 fab 使用 /bin/bash 执行 shell 命令,而我的目标服务器没有 unix 操作系统。所以shell命令不起作用

标签: python python-2.7 remote-access pexpect


【解决方案1】:

解决此问题的一种方法是首先启动 bash,然后运行您的命令。要记住的一件事是,在发送每个命令后调用 child.expect 是很好的。下面是一个如何连接到服务器然后运行 ​​ls 的示例。是的,但希望对您有所帮助。对于像 'cd' 这样的命令,你应该能够期望和空字符串,因为通常没有输出

import pexpect
import sys

child = pexpect.spawn("bash")
child.logfile = sys.stdout
child.sendline("ssh user@hostname")
child.expect("Some string to match")
child.sendline("ls")
child.expect("Some directory or file")
child.sendline("cd /path/to/file/or/directory")
child.expect("")
child.sendline("ls")
child.expect("A certain filename")

当您运行 ssh 命令时,您还可以执行类似的操作

ssh -t user@hostname 'cd /path/to/directory'

当你的 ssh 连接开始时,你会直接进入一个目录

【讨论】:

    猜你喜欢
    • 2017-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-24
    • 2011-01-10
    • 2012-08-25
    • 1970-01-01
    • 2023-01-17
    相关资源
    最近更新 更多