递归执行本地定义的Python脚本在远程机器上

4 投票
4 回答
1923 浏览
提问于 2025-04-17 09:42

我想写一个脚本,这个脚本只保存在我的本地电脑上,但它可以在远程机器上执行,甚至这些远程机器还可以在其他远程机器上执行这个脚本(也就是说,可能会有两层或更多层的递归调用)。

一种实现方法是,先把脚本复制到远程机器上,然后再通过ssh远程执行这个脚本,同时传递合适的参数给它。每次远程调用时,脚本会接收不同的参数,这个过程可能像这样:

subprocess.call(['ssh', <user@address>, 'python scriptname.py <params>'])

我想知道有没有办法在一步之内完成这个,而不需要先把python脚本复制过去。显然,我还是需要以某种方式把脚本里的代码传输过去,但我希望能避免运行两个单独的命令,甚至可能还需要第三个命令来在脚本执行完后清理远程机器上的文件。

4 个回答

0

看看 Fabric 吧。它是一个用Python写的工具,可以“编写和执行Python函数,或者说任务,来自动化与远程服务器的交互。” #

1

Python的可执行文件确实有一个 -c 选项,可以让你把有效的Python代码作为参数传进去。比如说:

$ python -c "print 'hello'; print 'world'"

这会输出

hello
world

不过,你的脚本可能有一些依赖关系,或者太复杂了,不能这样处理,但对于一些简单的命令,这种方式是可以的。

2

不,你不能一步到位做到这一点(除了可能像 python -c 'print "hello world"' 这样的简单命令)。不过,fabric 可能会让你的生活轻松一些。

撰写回答