我想知道有什么方法可以从终端中的 url (www.blahblah.com/script.py) 执行 python 脚本而不将文件下载到磁盘?
谢谢!
你想让它在客户端上运行,还是在服务器上运行(这将返回结果)?
如果您想在客户端上运行它,则必须以一种或另一种方式下载它。一种简单的方法是下载、运行、删除:
$ wget blahblah.com/script.py && (python script.py; rm script.py)
如果您想在服务器上运行它,您可以使用其他人提到的 CGI。但是,根据您想要做的事情,您可能想要使用 Web 框架。
对于轻量级框架,请查看Flask。他们的文档非常好,我设法在一天内启动并运行了一些东西(我对 Python 和 Web 服务器都很陌生)。
这是您要查找的内容:
wget -qO- https://gist.githubusercontent.com/mattwarrenrnp/6ca5bbeb4959974fb4ac/raw/23196eba76b1f21210f530a05572e38349384e0d/print.py | python -
解释:
-q用于安静模式隐藏错误以防止尝试被解释为 python
O-将下载定向到标准输出
使用“ - ”将该标准输出通过管道传输到 python,以告诉它从标准输入执行。
警告:始终确保您信任这样运行的脚本。
由于您没有提及终端中的外壳类型。我假设您正在使用/bin/bash
. 那么这就是你要找的东西:
python <(wget https://bootstrap.pypa.io/get-pip.py -q -O-)
在哪里
-q
安静(无输出)。
-O-
将文档写入标准输入
<
重定向标准输入
我知道这是一个超级旧的线程,但只是想说其他解决方案都没有真正为我们工作,部分原因是我们需要使用input()
,并且我们对创建临时文件犹豫不决,因为不能保证脚本不会出错. 最后,我们采用了以下对我们有用的方法:
python3 -c "$(wget -q -O - https://host.com/script.py)"
你问的是所谓的CGI。Python 有一个模块:
http ://docs.python.org/library/cgi.html
但是 CGI 现在有点过时了,因为它通常是一种为 python 应用程序提供服务的非常低效的方法。最好使用某种Python Web 框架。
支持 CGI 的 Web 服务器可以配置为解释用作 CGI 脚本引用的 URL。一个常见的约定是在目录树的底部有一个 cgi-bin/ 目录,并将其中的所有可执行文件视为 CGI 脚本。另一个流行的约定是使用文件扩展名。例如,如果 CGI 脚本始终以 .cgi 为扩展名,则可以将 Web 服务器配置为将所有此类文件解释为 CGI 脚本。
在 HTTP PUT 或 POST 的情况下,用户提交的数据通过标准输入提供给程序。Web 服务器创建一个小而有效的环境变量子集传递给它,并添加与程序执行相关的细节。
这如何适用于您的问题是,您script.py
首先需要居住在cgi-bin
您的网络服务器配置为识别类型的类似位置或类似位置内。其次,您需要使用cgi
python 模块来访问参数(并且还符合请求/响应格式)
查看Python 文档以获取有关在 Web 中使用 Python 的有用信息。
这个接口,最常被称为“CGI”,是最古老的,并且几乎每一个开箱即用的 Web 服务器都支持。使用 CGI 与其 Web 服务器通信的程序需要由服务器为每个请求启动。因此,每个请求都会启动一个新的 Python 解释器——这需要一些时间来启动——从而使整个接口仅可用于低负载情况。
CGI 的优点是它很简单——编写一个使用 CGI 的 Python 程序只需要大约三行代码。这种简单性是有代价的:它对开发人员的帮助很少。
虽然仍然可以编写 CGI 程序,但不再推荐。使用 WSGI(本文档后面将介绍的主题),可以编写模拟 CGI 的程序,因此如果没有更好的选择,它们可以作为 CGI 运行。
有一些更新的替代方案可以服务于 CGI 的目的,而没有它的一些缺点。
FastCGI 和 SCGI 试图以另一种方式解决 CGI 的性能问题。他们没有将解释器嵌入到 Web 服务器中,而是创建了长时间运行的后台进程。Web 服务器中还有一个模块可以让 Web 服务器与后台进程“对话”。由于后台进程独立于服务器,它可以用任何语言编写,包括 Python。该语言只需要一个库来处理与网络服务器的通信。
FastCGI 和 SCGI 之间的区别非常小,因为 SCGI 本质上只是一个“更简单的 FastCGI”。由于对 SCGI 的 Web 服务器支持有限,大多数人使用 FastCGI 代替,其工作方式相同。几乎所有适用于 SCGI 的东西也适用于 FastCGI,所以我们只介绍后者。