質問するログイン新規登録

回答編集履歴

1

pythonの言語バージョンによる違いを追記

2017/10/01 03:39

投稿

dodox86
dodox86

スコア9418

answer CHANGED
@@ -23,7 +23,7 @@
23
23
  確認用のコードを残していますので、差分を取って比較してみてください。
24
24
  尚、文字コードはutf-8で保存してください。
25
25
 
26
- ```python
26
+ ```python2
27
27
  #!/usr/bin/env python
28
28
  # -*- coding: utf-8 -*-
29
29
 
@@ -59,4 +59,52 @@
59
59
  html = "<html><body>%s</body><html>"
60
60
  print html % result
61
61
 
62
+ ```
63
+ ###python3に関して追記
64
+ python3 でのご質問だったのかもしれませんので、すみませんが以下、追記させていただきます。
65
+
66
+ 参考にされたサイト様のサンプルプロはpython2 のものです。
67
+ 私が提示したコードもpython2 のものなので、サーバー上でpython3でcgiを
68
+ 稼動させる場合、文法エラーで動作しません。
69
+ コードをpython3でほぼ等価なものに書き直し、動作確認したものを以下に示します。
70
+ ※「アップロード」の部分はそのままだとエラーになり、
71
+ コードが煩雑になるのでASCII文字列に直させてもらいました。
72
+
73
+ 今後pythonでcgiを造られる場合は、バージョンの違いに注意する必要があるかとは思います。
74
+
75
+ ```python3
76
+ #!/usr/bin/python3
77
+ # -*- coding: utf-8 -*-
78
+ import cgi
79
+ import os, sys
80
+
81
+ try:
82
+ import msvcrt
83
+ msvcrt.setmode(0, os.O_BINARY)
84
+ msvcrt.setmode(1, os.O_BINARY)
85
+ except ImportError:
86
+ pass
87
+
88
+ result = 'DUMMY'
89
+ form = cgi.FieldStorage()
90
+ #if form.has_key('file'):
91
+ if 'file' in form:
92
+ item = form['file']
93
+ if item.file:
94
+ # fout = file(os.path.join('/tmp', item.filename), 'wb')
95
+ fout = open(os.path.join('/tmp', item.filename), 'wb')
96
+ while True:
97
+ chunk = item.file.read(1000000)
98
+ if not chunk:
99
+ break
100
+
101
+ fout.write(chunk)
102
+ fout.close()
103
+ result = 'upload is done'
104
+ #result = "アップロード"
105
+
106
+ print("Content-Type: text/html")
107
+ print("")
108
+ html = "<html><body>{0}</body><html>"
109
+ print(html.format(result))
62
110
  ```