如何在远程机器上运行本地Python脚本
我在本地电脑上有一个Python脚本。有没有办法让这个脚本在远程电脑上运行?也就是说,脚本文件还是在本地电脑上,但执行这个脚本的过程是在远程电脑上进行的,然后把结果再传回到本地电脑。
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
你可以在 这里 找到一个类似问题的解决方案。
对于我遇到的具体问题,你可能也会碰到。我有一个本地脚本,想在远程机器上用它的虚拟环境运行。我在我的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
可能打印的所有内容都会返回到本地的标准输出。
简单来说,所有在 ssh user@remote
后面写的内容都会在远程机器上执行。如果你想传递多个命令,用 \;
分隔开,以免搞混了本地的命令行。
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
为远程命令提供了一种抽象,默认使用ssh
和scp
……但你很容易就能看出它在做什么。
>>> s.message
'ssh -q guido.remote.com "python hello.py"'
>>> c.message
'scp -q -r hello.py guido.remote.com:~/hello.py'
在这里获取pathos
:https://github.com/uqfoundation