【问题标题】:Fabric - how to use an interactive shell on remote computer?Fabric - 如何在远程计算机上使用交互式外壳?
【发布时间】:2015-03-30 19:56:44
【问题描述】:

我正在尝试使用 Fabric 在远程机器上运行命令。

这工作正常,直到远程机器上的命令是交互式的。在这种情况下,Fabric 返回交互式 shell,但强制我输入所需的信息,而我正在尝试发送一个远程执行所有操作的命令,因此我可以自动执行该过程。

例子:

from fabric.api import *
env.hosts=['myhost.mydomain']
env.user='root'
run(test1/myapp; exectask; exit)

我在远程机器上运行一个 cli 应用程序,它使用交互式 shell,所以它正在等待我输入命令 (exectask);然后一旦完成,退出,我调用 exit 命令。

现在发生的情况是应用启动,Fabric 向我显示交互式 UI,我仍然需要键入 exectask,然后退出。

我如何告诉fabric 运行该应用程序,然后将命令传递给交互式shell,然后退出退出?

我看到Fabric有提示功能,但那是要求用户输入数据,而我只想传递命令并返回结果。

【问题讨论】:

  • 您是否考虑过使用输入重定向,即 mycommand 其中 input.txt 包含您对交互式问题的回答?

标签: python fabric


【解决方案1】:

您可能想查看pexpect,这是一个类似于expect 的纯Python 模块。从本质上讲,它允许您的程序生成外部程序或进程,然后像人类与之交互一样控制它。您编写程序应该看到的内容(因此得名),然后执行什么操作。

【讨论】:

  • 谢谢马特,所以不可能用 Fabric 执行这样的操作吗?奇怪的是,在网络上,没有人使用 Fabric 来完成这样的任务,所以在放弃它并使用其他东西之前,我想确定它不能用 Fabric 完成。
  • @newbiez 老实说,我只将 Fabric 用于一些非常基本的任务——不需要交互性。我只是浏览了docs.fabfile.org 并没有看到任何立即有用的东西,但我看起来并不那么努力。我同意,它应该是可能的,所以也许更深入地阅读文档或谷歌搜索会产生更好的结果。
  • @newbiez 你曾经以这种方式使用过 Fabric 吗?我现在正在尝试做同样的事情,并且遇到了类似的问题。在连接到远程机器并启动远程程序后,它似乎无法识别提示,它挂起,因为前面的命令从未“完成”
猜你喜欢
  • 1970-01-01
  • 2018-07-11
  • 1970-01-01
  • 2016-04-16
  • 1970-01-01
  • 2011-09-07
  • 1970-01-01
  • 2015-09-26
  • 2013-08-26
相关资源
最近更新 更多