从终端的url运行python脚本

时间:2012-07-06 21:36:32

标签: python

我想知道是否有办法从终端的URL(www.blahblah.com/script.py)执行python脚本而不将文件下载到磁盘?

谢谢!

6 个答案:

答案 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

Common Gateway Interface

  

支持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-将文档写入标准输入

<重定向标准输入

参考:Execute bash script from URL

答案 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   好吧,所以我们只会介绍后者。