2011-07-01 95 views
2

我是一個博士後,我剛剛完成了一個很酷的Python科學應用程序,並希望與世界分享它。對於生產者來說這是一個非常有用的工具。用CGI保存臨時文件(Ubuntu)

我真的想讓人們通過CGI表單界面來運行這個程序。由於我不再是學生,因此我不再擁有網絡空間,並且完美地連接了一個整潔的小子目錄cgi-bin

幾年前,我寫了一個簡單的CGI Python程序,並試圖將其用作模板。

這是我的問題: 我的程序需要創建臨時文件(從命令行運行時,它將圖像保存到給定路徑)。 我已經閱讀了關於Apache等的一些教程,並且有很多東西在運行,但我無法弄清楚如何讓我的程序編寫臨時文件(我也不知道這些文件的位置等等)。 )。任何時候我嘗試在我的Python程序中寫入文件(以任何方式)時,CGI「崩潰」並且看起來不正常。

我並不是很擔心安全性,因爲臨時文件只會是程序的輸出(不是用戶輸入)。當我問(我假設你是一個CGI忍者,如果你有這麼多,並沒有感到無聊),你知道我的CGI程序可以採取一個文件的參數,而不會使一個臨時文件?

我以前的做法,這是簡單地採取文字列表作爲參數:

try: 
    if item.file: 
     data = item.file.read() 
     if check: 
      Tools_file.main(["ExeName", "-d", "-w " + data]) 
     else: 
      Tools_file.main(["ExeName", "-s", "-d", "-w " + data]) 
... 

我想做到這一點正確的方式!提前歡呼。

堆棧overflowingly你,
奧利弗

回答

3

好了,「正確」的方法可能是使用像Django的現有web框架重新工作的事情。在這種情況下可能是矯枉過正。不要低估這裏的安全方面。它們可能比你想象的更相關。

所有這一切說,你可能想使用Python的臨時文件模塊從標準庫:

http://docs.python.org/library/tempfile.html

它通常會先寫出來的東西到/ tmp /不管,如果你是unix平臺。如果您的程序只在apache下運行時崩潰(但直接執行時運行正常),請檢查您的權限。確保你的apache用戶有權寫入你決定存儲臨時文件的任何地方。確保臨時文件具有適當的權限(不想寫入以後無法讀取的文件)。

1

正如保羅·麥克米蘭說,使用臨時文件:

temp, temp_filename = tempfile.mkstemp(text = True) 
temp_output = os.fdopen(temp, 'w') 
temp_output.write(something_or_other) 
temp_output.close() 

我個人的看法是,框架是一個大的時間片,除非你真的需要的預建功能。 CGI要簡單得多,可以爲你的應用程序工作,至少在它真正受歡迎之前。