1

の出力をキャプチャして、後で閲覧できるようにファイルに書き込もうとしていますが、期待どおりに動作していないようですcgi.print_form()cgi.print_environ()

これはモジュールの出力を指定されたパスに単純に書き込むことを期待していますが、得られるのはcgi.print_form()出力がページに表示され、 からは何も表示されず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 は None になります)。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 に答える