1

我正在尝试捕获输出cgi.print_form()并将cgi.print_environ()它们写入文件以供以后阅读,但它的行为似乎不像我预期的那样。

我希望这只是将模块的输出写入指定的路径,但我得到的是cgi.print_form()显示到页面的输出,没有 from cgi.print_environ()formpath文件为空,并且envpath文件没有被创建。

当我将模块包装进去时,str()我得到None了两个文件。

这应该是一个快速测试,看看我从远程托管的表单中得到了什么,但它只是不起作用。

这是python 2.7.2

formfile = open(formpath, 'w')
formfile.write(cgi.print_form(form))
formfile.close()
envfile = open(envpath, 'w')
envfile.write(cgi.print_environ())
envfile.close()

编辑:刚刚决定编写我自己的循环,但我仍在寻找一种方法来捕获print_formprint_environ函数输出。

for item in form:
     key = form.getfirst(item)
     fileitem = form[item]
     if fileitem.filename:
          formfile.write("%s is file %s\n" % (item, fileitem.filename))
          filepath = '../fmtmp/%s_%s_%s' % (tstamp, item, fileitem.filename)
          open(filepath, 'w').write(fileitem.file.read())
     else:
          formfile.write("%s = %s\n" % (item, key))
formfile.close()
envfile = open(envpath, 'w')
for var in os.environ:
     envfile.write("%s = %s\n" % (var, os.environ[var]))
envfile.close()

这给了我将上传的任何内容保存为文件的额外好处。

4

1 回答 1

1

请注意,x = cgi.print_environ()如果在交互式提示中运行,仍然会输出内容(x 将为无)。CGI 通过标准输入/输出与 Web 服务器交互。print_environ() 只是打印到标准输出。重点是通过在浏览器中打印环境来轻松调试环境。

编辑:实际上将其发送到文件有点棘手。你可以试试:

f = open('file', 'w')
old = sys.stdout
sys.stdout = f
cgi.print_environ()
f.flush()
sys.stdout = old
f.close()
于 2012-06-08T16:47:04.623 回答