如何在远程机器上运行本地python脚本

时间:2014-03-11 08:55:27

标签: python

我的本​​地机器上有一个python脚本。有没有办法在远程机器上运行这个脚本。我的意思是python脚本应该在本地机器上但是应该在远程机器上执行并将输出返回到本地机器

3 个答案:

答案 0 :(得分:6)

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-tunneling,设置守护程序进程,远程端口pickle以及处理杀死远程进程......如果你需要那些东西。

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

答案 1 :(得分:3)

您可以在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并运行{{ 1}}。请注意,local_script.py最终可能打印的所有内容都会返回到本地标准输出。

TL; DR是你在local_script.py在遥控器中运行后编写的所有内容。如果要传递多个shell指令,请将它们与ssh user@remote分开,以免混淆本地shell。

还有其他可能的解决方案涉及FabricPlumbum之类的python模块,您可能会发现它们很有用。

答案 2 :(得分:-2)

如果要在远程计算机上执行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