【发布时间】:2016-10-21 13:19:29
【问题描述】:
我正在尝试使用织物自动化我的许多蜂巢作业并捕获输出。 hive 作业在服务器上运行(通过代理访问),我想将这些 hive 作业的输出保存到本地计算机上的文件中。目前我的方法是使用 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 脚本和使用结构的输出不相等。 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 运行 hive 脚本并捕获 hive 输出?
这里是要求的摘要:
当我这样做时,输出必须与文件的内容匹配:
ssh myserver "hive -e 'show tables;'" > myserver_results.txthive 消息/进度的流式输出,就像我在 shell 中运行上述命令一样
轻松设置以使用 SSH 和代理服务器,而无需依赖设置 ssh 配置。
根据我的实验,我尝试使用以下 python 库:paramiko、fabric、plumbum、sarge。
我认为 Fabric 是最接近的并且满足 (2)、(3)。 Sarge 似乎满足 (1) 和 (2)。
【问题讨论】: