gpt4 book ai didi

python - 将 local() 的输出通过管道传输到 Fabric 中远程 run() 命令的标准输入的最佳方法?

转载 作者:太空宇宙 更新时间:2023-11-03 12:10:07 25 4
gpt4 key购买 nike

有没有一种简单的方法可以将本地命令的输出通过管道传输到远程命令(反之亦然)?

我一直只是通过管道传输到一个文件,将文件移动过来,然后读取它……但似乎还有更简单的方法。

对于更简单的情况,只需捕获输出并使用字符串插值即可:

ip = local('hostname -i')
run('Script was run from ip: %s' % ip)

但是当输出需要转义以确保命令行安全和/或需要来自标准输入时,这就有点棘手了。

如果输出是 bash 安全的,那么像 run('echo "%s"| mycmd' % ip) 这样的东西会做我正在寻找的(我猜这意味着一个等效的问题是“是否有一种简单的方法来 bash 转义字符串?”),但似乎应该有一种“正确的方法”来提供远程标准输入。

编辑:

为了澄清长输入,简单字符串插值存在许多潜在问题:经典的 shell 问题(例如,输出可能包含 "; rm -rf/),但也(以及更多实际上,在我的例子中)输出可以包含引号(单引号和双引号)。

认为只是做 run("echo '%s' | cmd"% output.replace("'", "'\\''") 应该工作,但可能存在遗漏的边缘情况。

正如我上面提到的,这似乎是 fabric 可以通过直接将字符串发送到 run() 的标准输入来为我更优雅地处理的事情(尽管我可能只是被它处理其他所有事情宠坏了)如此优雅:)

最佳答案

您可以发送 remote stdin with fexpect, my fabric extension .这也会发送一个文件,但将其隐藏在 api 后面。不过,您仍然需要进行转义。

关于python - 将 local() 的输出通过管道传输到 Fabric 中远程 run() 命令的标准输入的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5098340/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com