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

     2023-03-04     113

关键词:

【中文标题】如何从 .sh 可执行文件执行远程 Python 文件?【英文标题】:How do I execute a remote Python file from a .sh executable? 【发布时间】:2014-12-17 11:52:01 【问题描述】:

我使用的是 Mac。

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

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

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

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

如果有人对如何实现这一点有任何想法(无论是否使用上述想法),请告诉我,我将不胜感激!

谢谢, 杰克

【问题讨论】:

用户没有对/tmp 的写入权限是不寻常的。此外,如果用户可以下载脚本,那么他们可以随意阅读和修改它 - ssh 只会限制可以这样做的用户集。 @mhawke 没关系。我真的不在乎是否有人阅读我只关心 Python 文件的脚本。但是如果他们不知道 python 文件在哪里,那么他们就无法读取它。 “脚本”是指远程 Python 文件。你将如何向确定的用户隐藏它的位置? @mhawke 好吧,如果必须将文件下载到用户的计算机上,那么我想他们可以找到它,但我认为如果它隐藏在文件系统中将很难找到。但是如果该文件可以远程运行,那么无论用户多么确定,他们都无法访问它。我在这里可能完全错了,但是不可能像 PHP 一样在服务器端运行 Python 文件,这样文件就永远不会真正在用户的计算机上,只是输出。 对不起,也许我不明白。你的问题是(是?)如何在本地机器上运行存储在远程服务器上的 python 脚本 - 正如你所说的,以某种方式将 python 脚本复制到本地机器,然后执行它。如果你想远程运行python脚本,那是完全不同的事情,有很多解决方案。 【参考方案1】:

假设远程 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

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

【讨论】:

【参考方案2】:

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

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

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

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

【讨论】:

感谢您的回答。我安装了请求库,但在运行您提供的 Python 文件时出现错误。这是错误:Traceback (most recent call last): File "/Users/jake 1/Dropbox/Python/downloadpy.py", line 3, in <module> exec(py1, globals(), locals()) File "<string>", line 1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> ^ SyntaxError: invalid syntax 打开替换“example.com/file.py”的网址?是 python 代码,还是以 '..' 开头

如何从 Python 3 脚本创建独立的可执行文件?

】如何从Python3脚本创建独立的可执行文件?【英文标题】:HowtocreateastandaloneexecutablefilefromPython3script?【发布时间】:2013-04-2702:02:36【问题描述】:我最近编写了一个在Python3.3中使用Tkinter的程序。我想将该程序作为不需要安装的... 查看详情

运行 .sh 脚本而不是可执行文件

...dofanexecutable【发布时间】:2013-03-0315:26:17【问题描述】:如何在Eclipse中运行.sh文件而不是可执行文件?我需要使用特殊命令启动可执行文件。我的sh文件看起来像这样optirun./executable【问题讨论】:sh文件是否可执行,chmod+xfile.sh?... 查看详情

如何让shell脚本变成可执行文件

参考技术A在本教程中介绍创建bash脚本并使用chmod命令使脚本可执行,无需脚本前面加上sh或bash命令就可以运行它。创建脚本文件第一步是使用以下命令创建一个扩展名为.sh的新文件:[root@localhost~]#touchhello_script.sh写一个简单的脚... 查看详情

如何让shell脚本变成可执行文件

在本教程中介绍创建bash脚本并使用chmod命令使脚本可执行,无需脚本前面加上sh或bash命令就可以运行它。创建脚本文件第一步是使用以下命令创建一个扩展名为.sh的新文件:[root@localhost~]#touchhello_script.sh写一个简单的脚本使用vim... 查看详情

如何始终在其所在目录执行 PyInstaller / Platypus 编译的 Python 可执行文件

】如何始终在其所在目录执行PyInstaller/Platypus编译的Python可执行文件【英文标题】:HowtoalwaysexecutePyInstaller/PlatypuscompiledPythonexecutableinthedirectorywhereitislocated【发布时间】:2021-07-0200:34:17【问题描述】:我有一个python脚本需要从它... 查看详情

shell的可执行权限

...shell,ls后看到它的权限是:-rw-r--r--,按理说应该没有可执行权限,但我用shshell.sh可以执行,请问这是为什么?谢谢!通过sh运行脚本只需要有读权限就好了,意思就是通过/bin/sh执行该文件。而./就是直接运行该文件,运行的方... 查看详情

java示例代码_通过编程将数据从远程可执行文件放入Google Appengine数据库

java示例代码_通过编程将数据从远程可执行文件放入Google Appengine数据库 查看详情

为啥我不能从我的 python 脚本创建可执行文件?

】为啥我不能从我的python脚本创建可执行文件?【英文标题】:WhycantIcreateanexecutablefrommypythonscript?为什么我不能从我的python脚本创建可执行文件?【发布时间】:2021-12-3002:10:34【问题描述】:我尝试在python3.10中将我的python脚本CH... 查看详情

从 python 源构建 Windows 可执行文件

】从python源构建Windows可执行文件【英文标题】:BuildingaWindowsexecutablefrompythonsource【发布时间】:2012-07-2313:12:11【问题描述】:我们有一个Py模块,我们想以Windows可执行文件的形式提供给用户。是否有一个经过验证的好工具可以... 查看详情

如何使用python执行远程shell脚本

参考技术Apexpect复杂,但通用灵活。另外一种法就是ssh-keygen/ssh-copy-id,实现自动密钥验证取代手动密码验证,然后就可以直接调用远程‘sshremote-user@remote-hostremote-script.sh’,麻烦之处在于要手动创建与维护两台机器间的公钥。至... 查看详情

sh使文件可执行(代码片段)

查看详情

如何从可执行文件中提取数组?

】如何从可执行文件中提取数组?【英文标题】:HowcanIextractanarrayfromanexecutablefile?【发布时间】:2010-04-2714:43:52【问题描述】:我想做thisquestion的逆操作。我将文件作为数组嵌入到可执行文件中,稍后我想从可执行文件中提取嵌... 查看详情

使用 Pyinstaller 或 Cython 从 Python 模块创建可执行文件

】使用Pyinstaller或Cython从Python模块创建可执行文件【英文标题】:CreateExecutablefromaPythonmodulewithPyinstallerorCython【发布时间】:2019-02-0917:14:34【问题描述】:我想转换为具有模块结构的可执行thispython2.7项目:(.venv)ip-192-168-22-127:indict... 查看详情

是否可以从 Python 可执行文件访问启动快捷方式目录?

】是否可以从Python可执行文件访问启动快捷方式目录?【英文标题】:IsitpossibletoaccessthelaunchingshortcutdirectoryfromaPythonexecutalbe?【发布时间】:2018-02-2623:01:13【问题描述】:我目前有一个Python脚本,它遍历当前目录中的所有Excel文... 查看详情

如何根据源代码制作可执行文件

】如何根据源代码制作可执行文件【英文标题】:howtomakeexcutablefilesbasedonsourcecodes【发布时间】:2013-02-2400:16:21【问题描述】:我在linux上用C写了一些程序我想在许多远程计算机上运行这些程序,这些计算机安装了fedora或ubuntu我... 查看详情

如何从 Github 获取可执行文件

】如何从Github获取可执行文件【英文标题】:HowtogettheexecutablefromGithub【发布时间】:2021-05-2714:22:11【问题描述】:如何从https://github.com/tsenart/vegeta/releases获取exe以便在windows中测试?This说我可以在此链接中找到.exe,但我没有。... 查看详情

使用命令行参数从 Python 运行 C 可执行文件

】使用命令行参数从Python运行C可执行文件【英文标题】:RunningaCexecutablefromPythonwithcommandlinearguments【发布时间】:2021-12-2914:22:01【问题描述】:我有一个C文件说,myfile.c。现在我正在编译:gccmyfile.c-omyfile所以现在我需要运行这... 查看详情

java如何执行远程服务器上的.sh文件

你可以使用JSchJSch全称是“JavaSecureChannel”是SSH2的一个纯Java实现。它允许你连接到一个sshd服务器,使用端口转发,X11转发,文件传输等等。同时也是支持执行命令;以下是大概运行的代码,只是提供大致思路,可以去查官方API... 查看详情