如何从.sh可执行文件执行远程Python文件?

时间:2014-10-22 04:53:15

标签: python macos ssh terminal osx-mavericks

我正在使用Mac。

我在服务器上有一个Python文件。让我们说它在这里:http://jake.com/python_file.py。我想创建一个我可以run in Terminal by double-clicking的脚本,并在本地机器上的Terminal中运行Python文件。有什么想法吗?

我是否必须使用SSH连接服务器并将download the file连接到硬盘驱动器上的临时位置(/ tmp?),然后在完成后将其删除?但是这有另一个问题。它必须将Python文件下载到用户主文件夹中的某个位置,因为我认为用户没有必要的权限来写入文件夹/ tmp或/ var或类似的东西。

我正在寻找解决问题的方法并找到this。它讨论了如何在unix上使用SSH执行远程脚本,但我尝试用我的Python文件执行此操作并且它不起作用。

如果您没有意识到,我希望这样做的主要原因是用户可以在本地运行该文件,但他们无法读取/编辑存储在服务器上的实际Python文件。

如果有人对如何做到这一点有任何想法(无论是否使用上述想法),请告诉我,我真的很感激!

谢谢, 杰克

2 个答案:

答案 0 :(得分:0)

下载和执行代码的python脚本怎么样?

import requests 
py1 = requests.get('https://example.com/file.py').content
exec(py1, globals(), locals())

注意:我正在使用requests库,但您可以轻松使用内置的httplib HTTPSConnection。它只是更冗长。

注意2:当您说您不希望用户能够“读取/编辑实际的Python文件”时,如果他们自己打开网址,他们能够阅读它并查看内容。他们不太可能在本地编辑文件并弄乱一些东西。您还可以将python脚本的更新部署到URL,而不必将它们本地复制到每台计算机。这可能存在安全风险,具体取决于您使用它的范围。

答案 1 :(得分:0)

假设远程Python脚本是一个没有Python标准库以外的依赖项的单个文件,并且在用户的本地机器上安装了兼容的Python版本,有几个显而易见的方法这样做。

使用ssh

#!/usr/bin/env sh
ssh user@host cat /path/to/python/script.py | python

或使用scp

#!/usr/bin/env sh
TMPFILE=/tmp/$$
scp user@host:/path/to/python/script.py $TMPFILE
python $TMPFILE
rm $TMPFILE

第一个显而易见的优点是不需要复制文件和事后清理。

如果你想在远程服务器上执行python脚本,也可以使用ssh来完成:

ssh user@host python /path/to/python/script.py

标准输入和输出将是用户本地计算机上的终端。