有没有办法通过将它连接到远程shell在结构中的标准输入来执行多行shell脚本?或者我必须始终将其写入远程文件系统,然后运行它,然后删除它?我喜欢发送到stdin,因为它避免了临时文件.如果没有结构API(似乎没有基于我的研究),大概我可以直接使用ssh模块.基本上,我希望fabric.api.run不仅限于获取传递给shell作为命令行参数1行命令,而是会采取一个完整的多行脚本并将其写入到远程shell的标准输入.
为了澄清我想要这个命令行的结构等效:
ssh somehost /bin/sh < /tmp/test.sh
Run Code Online (Sandbox Code Playgroud)
除了在python中,脚本源coude不会来自本地文件系统上的文件,它只是内存中的多行字符串.请注意,这是一个逻辑操作,远程端没有临时文件,这意味着意外故障和崩溃不会留下孤立文件.如果在结构中有这样的选项(这就是我要问的问题),那么任何一方都不需要一个临时文件,这只需要一个ssh操作.
您可以使用Fabric操作。您可以使用
fabric.operations.put(local_path, remote_path, use_sudo=False,mirror_local_mode=False,mode=None)
将脚本文件复制到远程路径,然后执行它。
要么,
您可以使用fabric.operations.open_shell,但这仅适用于一系列简单命令,对于涉及逻辑流的脚本,最好像在本地服务器上一样使用put操作并执行脚本。
没有内置的方法可以做到这一点。不过你可以对其进行编程:
from fabric.api import run
scriptfilehandle = open('myscript.sh')
for line in scriptfilehandle:
run(line)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8149 次 |
| 最近记录: |