【问题标题】:Recursively execute a locally defined python script on remote machines在远程机器上递归执行本地定义的python脚本
【发布时间】:2012-01-06 21:42:20
【问题描述】:

我有兴趣编写一个脚本,以便脚本的唯一副本驻留在我的本地计算机上,但脚本在远程计算机上执行,可能远程计算机在其他远程计算机上执行脚本(即 2 或分布式调用树中的更多递归级别)。

实现这一点的一种方法是一步将脚本复制到远程计算机,然后在第二步通过 ssh 执行远程执行,将适当的参数传递给脚本,该脚本将为每个远程调用传递不同的参数,每一个都将通过以下方式执行:

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

是否可以在不先复制 python 脚本的情况下一步实现。显然,我仍然需要以某种方式将脚本中的代码作为远程调用的一部分传输,但最好不必运行两个单独的命令,甚至可能运行第三个命令来从远程清理文件脚本运行后的机器。

【问题讨论】:

    标签: python ssh


    【解决方案1】:

    不,您将无法一步完成(python -c 'print "hello world"' 可能除外)。但是fabric 可能会让你的生活更轻松。

    【讨论】:

    • 谢谢,我有一个使用 -c 的概念证明,并将脚本源代码作为参数传递给递归调用。
    【解决方案2】:

    Python 二进制文件确实有一个 -c 选项,可让您将有效的 Python 代码作为参数传递。例如:

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

    打印

    hello
    world
    

    您的脚本可能有依赖关系或过于复杂,但它确实可以处理更琐碎的命令。

    【讨论】:

      【解决方案3】:

      我知道sshuttle 会将此“引导”作为其正常执行的一部分。它假定 ssh 连接的远程端存在 Python 解释器,并上传代码以运行。

      我还没有调查代码来确切了解它的作用,但它应该很容易找到。

      【讨论】:

        【解决方案4】:

        查看Fabric。它是“编写和执行 Python 函数或任务,以自动与远程服务器交互”的 Python 工具。 #

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-04-14
          • 1970-01-01
          • 2013-08-16
          • 2018-07-18
          • 2017-09-08
          • 1970-01-01
          • 2016-04-02
          相关资源
          最近更新 更多