【问题标题】:how to run local python script on remote machine如何在远程机器上运行本地python脚本
【发布时间】:2014-04-14 18:26:43
【问题描述】:

我的本​​地机器上有一个 python 脚本。有什么方法可以在远程机器上运行这个脚本。我的意思是 python 脚本应该在本地机器上,但应该在远程机器上执行并将输出返回到本地机器.

【问题讨论】:

标签: python


【解决方案1】:

pathos 包中的工具可以轻松地与远程机器进行交互,所有这些都直接来自 python……您还可以轻松捕获 stdout 或其他管道响应并将它们返回到您的调用脚本。

假设您有一个本地脚本hello.py,如下所示:

# 'hello.py'
import os
print os.system('hostname')

他们可以推送脚本并像这样执行它:

>>> import pathos
>>> c = pathos.core.copy('hello.py', destination='guido.remote.com:~/hello.py')
>>> s = pathos.core.execute('python hello.py', host='guido.remote.com')
>>> print s.response()
guido
0
>>> s.pid()
37429

还有 ssh 隧道、设置守护进程、远程端口酸洗和处理远程进程……如果你需要这些东西的话。

pathos 提供了远程命令的抽象,默认为sshscp……但很容易看出它在做什么。

>>> s.message
'ssh -q guido.remote.com "python hello.py"'
>>> c.message
'scp -q -r hello.py guido.remote.com:~/hello.py'

在此处获取pathoshttps://github.com/uqfoundation

【讨论】:

    【解决方案2】:

    您可以在here找到类似问题的解决方案

    对于我的特定问题,您可能也遇到过,我有一个本地脚本,我想使用它的一个虚拟环境在远程机器上运行它。我在 bashrc 中添加了以下内容:

    rpython (){
        cat $1 | ssh user@remote source /home/user/venv/bin/activate \; python -
    }
    

    这样我就可以运行rpython local_script.py。所以它是这样工作的:cat $1 | 管道第一个参数,ssh user@remote source /home/user/venv/bin/activate \; python - 部分通过 ssh 复制管道,启动远程机器的虚拟环境 venv 并运行 local_script.py。请注意,local_script.py 最终可能打印的所有内容都会返回到本地标准输出。

    这里的 TL;DR 是您在远程运行 ssh user@remote 之后编写的所有内容。如果您想传递多个 shell 指令,请将它们用 \; 分隔,以免混淆您的本地 shell。

    还有其他可能的解决方案涉及 Python 模块,例如 FabricPlumbum,您可能会觉得有用。

    【讨论】:

      【解决方案3】:

      如果要在远程机器上执行 python 脚本,脚本必须驻留在远程机器上。

      如果您有远程机器的 SSH 访问权限,您需要先将文件从本地机器复制到远程机器:

      scp -r /this/file/location/my_script.py user@server:/home/newlocation
      

      然后只需通过 SSH 连接到远程计算机并运行脚本。

      ssh user@server
      cd /home/newlocation
      python my_script.py
      

      【讨论】:

      • 您对适用于 Windows 的 ssh 服务器有什么建议吗?我试过mobassh和openSSH,虽然我可以执行普通的windows命令和powershell命令,但我无法运行python my_script.py。它总是出错:serverfault.com/questions/901041/…。也许问题出在我正在使用的服务器上..
      猜你喜欢
      • 2018-07-18
      • 2016-04-02
      • 2013-12-28
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多