使用CGI保存临时文件(Ubuntu)

时间:2011-07-01 20:11:32

标签: python ubuntu cgi

我是一名博士后,我刚刚用Python完成了一个很酷的小科学应用程序,并希望与全世界分享。对于genetecists来说,这是一个非常有用的工具。

我真的想让人们通过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])
...

我想以正确的方式这样做!提前干杯。

堆栈溢出你的,
奥利弗

2 个答案:

答案 0 :(得分:3)

嗯,“正确”的方式可能是使用像Django这样的现有Web框架重新工作。在这种情况下,它可能有点过分。不要低估这里的安全方面。它们可能比你想象的更有意义。

所有这些,你可能想要使用标准库中的Python临时文件模块:

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

如果你在unix上,它通常会把东西写到/ tmp /中。如果您的程序仅在apache下运行时崩溃(但直接执行时运行正常),请检查您的权限。确保您的apache用户有权写入您决定存储临时文件的位置。确保使用适当的权限写入临时文件(不想写一个以后无法读取的文件)。

答案 1 :(得分:1)

正如Paul McMillan所说,使用tempfile:

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

我个人认为,除非你真的需要预先构建的功能,否则框架是一个很大的时间。 CGI更简单,可能适用于您的应用程序,至少在它变得非常流行之前。