2012-07-06 82 views
2

運行一個python腳本我想知道的是任何方式來執行從終端的url(www.blahblah.com/script.py)python腳本沒有下載文件到磁盤?從終端

謝謝!

+0

技術上講,它會下載一個或其他方式。無法訪問您無法閱讀的內容。 – TheZ 2012-07-06 21:37:49

+1

@TheZ:那不是真的。服務器端執行腳本就是這樣做的。執行服務器端。你會得到的是執行的結果。不是原始文件。 – jdi 2012-07-06 21:42:37

+0

@jdi那臺服務器正在做什麼?首先將文件下載到磁盤。 – TheZ 2012-07-06 21:44:08

回答

1

你在問什麼叫做CGI。 Python有一個模塊是:
http://docs.python.org/library/cgi.html

但CGI現在是有點過時,因爲它通常是一個非常低效的方法來服務於Python應用程序。您最好使用某種類型的python web framework

Common Gateway Interface

支持CGI可經配置以解譯URL ,它用作到一個CGI腳本的參考的Web服務器。一個常見的約定是 在目錄樹的底部有一個cgi-bin /目錄,並且 將其中的所有可執行文件視爲CGI腳本。另一個受歡迎的 約定是使用文件擴展名;例如,如果CGI腳本 一致地被賦予了擴展名.cgi,則web服務器可以是 ,其被配置爲將所有這些文件解釋爲CGI腳本。
對於 HTTP PUT或POST,用戶提交的數據通過標準輸入提供給程序 。 Web服務器創建一個小而有效的傳遞給它的環境變量的子集,並添加與程序執行相關的詳細信息 。

如何適用於你的問題是,你的script.py需要先住你的Web服務器被配置爲識別的類型cgi-bin或類似的位置內。其次,您需要使用cgi python模塊來訪問參數(並且符合請求/響應格式)

0

查看Python docs以獲取有關在Web中使用Python的有用信息。

該接口通常被稱爲「CGI」,是最古老的,並且幾乎每個開箱即用的網絡服務器都支持 。對於每個請求,使用 CGI與其Web服務器進行通信的程序需要由 服務器啓動。所以,每個請求都會啓動一個新的Python解釋器 - 這需要一段時間才能啓動 - 因此整個接口只能用於低負載情況。

CGI的好處在於它很簡單 - 編寫一個使用CGI的Python程序 約三行代碼。 這個簡單的代價是:它幫助 的開發者做了很少的事情。

不再推薦編寫CGI程序,儘管可能。 由於WSGI是本文稍後討論的主題,因此可以使用 編寫仿效CGI的程序,因此如果沒有可用的更好選項,它們可以作爲CGI運行。

newer alternatives服務於CGI的目的,沒有一些缺點。

FastCGI和SCGI試圖以另一種方式解決CGI的性能問題 。他們不會將解釋器嵌入到Web服務器中,而是創建長時間運行的後臺進程。網絡服務器中仍有一個模塊 ,這使得網絡服務器 可以與後臺進程「說話」。由於後臺進程是獨立於服務器的 ,因此可以用包括Python的任何語言 來編寫。該語言只需要有一個庫,其中 處理與網絡服務器的通信。

FastCGI和SCGI之間的區別非常小,因爲SCGI實質上只是一個「更簡單的FastCGI」。由於SCGI的網頁服務器支持有限,所以大多數人使用FastCGI,它與 的工作方式相同。幾乎所有適用於SCGI的東西都適用於FastCGI,因爲我們只會涵蓋後者。

6

你想讓它在客戶端或服務器上運行嗎?(這會返回結果)?

如果你想在客戶端運行它,它將不得不以某種方式下載。一個簡單的方法是下載,運行,刪除:

$ wget blahblah.com/script.py && (python script.py; rm script.py) 

如果你想在服務器上運行這個,你可以使用其他人提到的CGI。取決於你想要做什麼,你可能想使用一個web框架。

對於輕量級框架檢出Flask。他們的文檔非常優秀,我設法在一天內完成並運行一些東西(我對Python和Web服務器都相當陌生)。

2

這裏就是你要找的內容:

wget -qO- https://gist.githubusercontent.com/mattwarrenrnp/6ca5bbeb4959974fb4ac/raw/23196eba76b1f21210f530a05572e38349384e0d/print.py | python - 

解釋:

-q安靜模式隱藏的錯誤從試圖解釋爲蟒蛇

O-會直接下載到標準輸出

pipe stdout to python '-'告訴它從標準輸入執行。

警告:始終確保您信任您以這種方式運行的腳本。

1

由於您沒有提到您的終端中使用了哪種類型的shell。我假設你正在使用/bin/bash。那麼這裏就是你在找什麼:

python <(wget https://bootstrap.pypa.io/get-pip.py -q -O-) 

其中

-q安靜(無輸出)。

-O-寫入文件,標準輸入

<標準輸入重定向

參考:Execute bash script from URL