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

iq0todco  于 2021-06-28  发布在  Hive
关注(0)|答案(2)|浏览(434)

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

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。
我认为织物是最接近的,满足(2),(3)。中士似乎满足(1)和(2)。

rqmkfv5c

rqmkfv5c1#

我不知道为什么你会得到一个登录横幅,但这可能有一些解释如何抑制它:https://serverfault.com/questions/66986/suppressing-ssh-banner-from-openssh-client/67006 你也可以使用 tail 以及 head 按摩你的输出,当然,你可以随时操纵的结果 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

虽然我不是HiveMaven,但也可以在 .hiverc 可以更改输出格式的文件。

nxagd54h

nxagd54h2#

在用织物做了更多的实验之后,我可以非常接近地模仿 ssh myserver "hive -e 'show tables;'" > myserver_results.txt . 以下是我尝试过的几种方法: run("hive -e 'show tables;' 2>/dev/null") :这将把配置单元的stderr消息重定向到null,并且fabric返回的最终输出将不包括它。这并不完全有效,因为它还会抑制配置单元的进度消息—对于长时间作业,您永远无法确定作业是否正确运行或已暂停。
env.combine_stderr = False 以及 env.always_use_pty = False 以及 run 一切正常。从文档中可以看出,这将关闭伪终端,使其难以交互,但在运行配置单元作业时,这似乎不是什么大事。此外,这两个选项都允许使用不同的stdout和stderr。但是,这仍然无法在配置单元启动之前从服务器中删除欢迎消息。 output = run("hive -e 'show tables;' > temp_file.txt") . 通过管道将输出传输到服务器上的一个文件,甚至不尝试处理从fabric返回的流输出。此文件可以写入服务器的 /tmp 并且可以复制到本地机器上。

相关问题