python - 使用python通过ssh捕获配置单元输出

标签 python ssh hive fabric

我正在尝试使用结构自动化许多配置任务并捕获输出。配置单元作业在服务器上运行(可通过代理访问),我想将这些配置单元作业的输出保存到本地计算机上的文件中。当前,我的方法是使用Shell脚本通过SSH调用hive并将输出重定向到文本文件。这是一个例子:

ssh myserver "hive -e 'show tables;'" > myserver_results.txt

我正在尝试使用python和fabric重新创建类似的东西:
from fabric.api import run, env

env.gateway = 'my_proxy'
env.hosts = ['hive_server']
output = run("hive -e 'show tables;'")
print(output)

我的问题是使用Shell脚本和使用Fabric的输出不相等。 Shell脚本的输出如下所示:
[HIVE OUTPUT]

print(output)print(output.stdout)中的结构结果都将如下所示:
[WELCOME MESSAGE FOR THIS SERVER]
[HIVE START CONSOLE OUTPUT]
[HIVE OUTPUT]
[Time taken: 0.2 seconds, Fetched: 520 row(s)]

有没有一种简单的方法可以使用python和fabric复制我的shell脚本的输出?

编辑:
我想编辑我的原始问题并扩大范围。经过更多的实验后,我认为Fabric无法以我想要的方式轻松捕获输出。所以我提出一个问题,是否有一种方法可以使用python通过SSH运行配置单元脚本并捕获配置单元输出?

以下是要求摘要:
  • 执行此操作时,输出必须与文件内容匹配:ssh myserver "hive -e 'show tables;'" > myserver_results.txt
  • 流式配置单元消息/进度的输出,就像在shell
  • 中运行上述命令时一样
  • 易于安装,可与SSH和代理服务器一起使用,而不必依赖于具有ssh配置的安装程序。

  • 根据我的实验,我尝试使用以下python库:paramiko,fabric,plumbum,sarge。

    我认为Fabric是最接近的,可以满足(2),(3)。萨尔格似乎满足(1)和(2)。

    最佳答案

    我不确定为什么会出现登录标语,但这可能会对如何隐藏它产生一些解释:https://serverfault.com/questions/66986/suppressing-ssh-banner-from-openssh-client/67006您还可以使用tailhead来按摩输出,当然,您始终可以操纵内存中的stdout。所以我会做这样的事情

    output = run(
        "hive -e 'show tables;' "
        "| head -n -1 "
        "| tail -n -3")
    # where 3 is the number of lines you want to skip at the beginning
    

    虽然我不是 hive 专家,但是您也可以在.hiverc文件中设置一些设置,这些设置可以更改输出格式。

    关于python - 使用python通过ssh捕获配置单元输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40143648/

    相关文章:

    git - "Github for Windows"中的魔法是什么让它在 emacs 中工作?

    linux - 重置 Google 计算引擎 VM 无法通过 SSH 连接到实例

    hive - Google DataProc Hive 和 Presto 查询不起作用

    hadoop - 如何将 hbase 表打印到制表符分隔的文本文件

    Python:使用 `pickle`或 `marshal`与使用 `re`的性能比较

    python - 如何从txt文件中删除特定行及其后面的n行?

    python - 脚本无法通过 Selenium 和 Python 使用 xpath 或 id 或其他任何内容找到按钮

    python - 使用具有奇怪输出的 Softmax 的神经网络

    windows - github在windows上生成ssh key

    hadoop - Hive外表数据是不是和内表一样分布到数据节点?