我是一名博士后,我刚刚用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])
...
我想以正确的方式这样做!提前干杯。
堆栈溢出你的,
奥利弗
答案 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更简单,可能适用于您的应用程序,至少在它变得非常流行之前。