2011-07-01 58 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要简单得多,可以为你的应用程序工作,至少在它真正受欢迎之前。