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