有没有一种简单的方法可以将本地命令的输出通过管道传输到远程命令(反之亦然)?
我一直只是通过管道传输到一个文件,将文件移过来,然后读取它……但似乎有更简单的方法。
对于更简单的情况,只需捕获输出并使用字符串插值即可:
ip = local('hostname -i')
run('Script was run from ip: %s' % ip)
但是,当输出需要转义以在命令行上安全和/或需要来自标准输入时,这就有点棘手了。
如果输出是 bash 安全的,那么类似的东西run('echo "%s" | mycmd' % ip)
会做我正在寻找的东西(我猜这意味着一个等效的问题是“是否有一种简单的方法来 bash-escape 字符串?”),但它似乎在那里应该是提供远程标准输入的“正确方法”。
编辑:
为了澄清 long-ish 输入,简单的字符串轮询存在许多潜在问题:经典的 shell 问题(例如,输出可能"; rm -rf /
包含)。
我认为只是做run("echo '%s' | cmd" % output.replace("'", "'\\''")
应该有效,但可能会遗漏一些边缘情况。
正如我上面提到的,这似乎是织物可以通过直接向 run() 的标准输入发送一个字符串来为我更优雅地处理的类型(尽管我可能只是被它如此优雅地处理其他所有事情所宠坏了: )