我正在尝试使用Fabric在远程计算机上运行命令。
在远程计算机上的命令是交互式的之前,这可以正常工作。在这种情况下,Fabric返回了交互式外壳程序,但是当我尝试发送一个可以远程执行所有操作的命令时,强制我键入所需的信息,因此我可以使该过程自动化。
例:
from fabric.api import *
env.hosts=['myhost.mydomain']
env.user='root'
run(test1/myapp; exectask; exit)
我在使用交互式外壳程序的远程计算机上运行cli应用程序,因此它正在等待我键入命令(exectask);然后一旦完成,要退出,我会调用exit命令。
现在发生的是,应用程序启动,Fabric向我显示了交互式UI,我仍然需要键入exectask,然后退出。
我如何告诉Fabric运行该应用程序,然后将命令传递给交互式Shell,然后退出以退出?
我看到Fabric具有提示功能,但这是要求用户输入数据,而我只想传递命令并返回结果。
最佳答案
您可能需要研究pexpect
,这是一个与expect
类似的纯Python模块。从本质上讲,它允许您的程序生成外部程序或进程,然后像对其进行交互一样对其进行控制。您以程序应该看到的内容(因此命名)进行编程,然后执行什么操作。