【发布时间】:2014-04-14 18:26:43
【问题描述】:
我的本地机器上有一个 python 脚本。有什么方法可以在远程机器上运行这个脚本。我的意思是 python 脚本应该在本地机器上,但应该在远程机器上执行并将输出返回到本地机器.
【问题讨论】:
-
请添加有关您正在使用的操作系统的一些详细信息。你熟悉 SSH 吗?
标签: python
我的本地机器上有一个 python 脚本。有什么方法可以在远程机器上运行这个脚本。我的意思是 python 脚本应该在本地机器上,但应该在远程机器上执行并将输出返回到本地机器.
【问题讨论】:
标签: python
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
【讨论】:
您可以在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 脚本,脚本必须驻留在远程机器上。
如果您有远程机器的 SSH 访问权限,您需要先将文件从本地机器复制到远程机器:
scp -r /this/file/location/my_script.py user@server:/home/newlocation
然后只需通过 SSH 连接到远程计算机并运行脚本。
ssh user@server
cd /home/newlocation
python my_script.py
【讨论】:
python my_script.py。它总是出错:serverfault.com/questions/901041/…。也许问题出在我正在使用的服务器上..