トップページ⇒php
359コメント75KB

Python CGI

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2006/11/14(火) 23:09:04ID:KpRkBouP
PythonでCGI

PyJUG:ドキュメントはここ
http://www.python.jp/Zope/

Python CGI入門みたいの
http://www.gesource.jp/programming/python/cgi/index.html

cgiモジュール説明書
http://www.python.jp/doc/2.4/lib/module-cgi.html
0074nobodyさん2008/08/12(火) 22:31:30ID:hynniAyL
54>>
http://wiki.python.org/moin/PythonBlogSoftware
ここから探してみて。
0075nobodyさん2008/08/12(火) 23:37:44ID:???
>>74
Python Desktop ServerがZope Baseとかないわ(www
0076nobodyさん2008/08/26(火) 20:27:56ID:???
written by pythonでも通じると思うよ。
「パイソンさんによって書かれています」みたいな感じでしょ?
0077nobodyさん2008/08/26(火) 21:12:09ID:???
Pythonが自分の意志を持って書いたんだったらいいんじゃね。
0078nobodyさん2008/08/26(火) 21:21:42ID:???
まだやってんのかww
0079nobodyさん2008/08/27(水) 19:53:32ID:???
pythonのCGIなんて使う人いないんです
0080nobodyさん2008/08/28(木) 00:11:38ID:???
粘着してる暇があったらpygameの翻訳しろよ>中学生
0081nobodyさん2008/09/11(木) 03:03:43ID:PPyFAFla
根性曲がりきった大人が多すぎwwWWwwww
0082nobodyさん2008/09/11(木) 08:43:02ID:???
他人のこと考える暇があったらpygameの翻訳しろよ>引きこもり
0083nobodyさん2008/09/11(木) 23:02:54ID:???
pygame のドキュメントが読めないの?
0084nobodyさん2008/09/13(土) 01:15:13ID:???
pygame関係ないじゃん
0085nobodyさん2008/09/13(土) 13:10:09ID:???
パイつながりだろ!
0086nobodyさん2008/09/14(日) 09:11:46ID:???
そんなこと言ったら、pychinko まで python と
関係あることになるぞ
0087nobodyさん2008/09/15(月) 03:01:54ID:???
pythonでcgiやるときに、CSSでデザインするのはどうやってやるの?
0088nobodyさん2008/09/15(月) 04:28:01ID:???
ちがうよぜんぜんちがうよ
0089nobodyさん2008/09/15(月) 13:49:02ID:???
>>87
釣りか?
HTMLに埋め込むか、
ファイルにCSSを書いて @import か linkタグで読み込ませる
0090nobodyさん2008/09/15(月) 14:23:02ID:???
<link rel="stylesheet" href="file.css">
0091nobodyさん2008/09/23(火) 20:07:32ID:???
>>89,90

ありがとう!、そうやればいいのか。
0092nobodyさん2008/11/11(火) 01:09:48ID:???
GoogleはpythonでCGI?
今日からperlやめてpythonにしよ。
0093nobodyさん2008/11/11(火) 01:38:42ID:???
Googleが通常使う言語のひとつにしてるだけだがな・・・
0094 2008/11/27(木) 12:54:04ID:???
Pythonで配列を代入するにはどうすればいいですか?
例えばPHPで

$A = array(
"{$ONE['test']}",
"{$TWO['test']}",
"{$THREE['test']}"
);

こういうのをPython式に置き換えると?
0095nobodyさん2008/11/27(木) 14:35:47ID:???
>>94
配列とはちょっと違うが辞書とリストならこんな感じ?

ONE = { 'test':'hoge' }
TWO = { 'test':'sage' }
THREE = { 'test':'age' }
A = [ONE['test'],TWO['test'],THREE['test']]
0096nobodyさん2008/11/27(木) 16:27:04ID:???
A = {
'ONE':'test',
'TWO':'test',
'THREE':'test'
}
0097942008/11/27(木) 17:15:30ID:???
出来ました!
ありがとうございました
0098 2008/12/05(金) 02:25:27ID:???
連想配列と辞書とリストの違いが解りません。
どういうこと?
0099nobodyさん2008/12/06(土) 12:58:50ID:???
変数が定義されているか判定したいんですが
PHPでいうissetみたいなものはありますか?
0100nobodyさん2008/12/06(土) 15:52:12ID:???
ありません。
NameErrorやAttributeErrorを捕まえてください。
0101 2008/12/07(日) 12:29:28ID:???
具体的にどうやればいいんでしょうか?
0102nobodyさん2008/12/07(日) 15:09:25ID:???
try:
  a
except NameError:
  print "aなし"
else:
  print "aあり"

変数があるかないか調べなきゃいけないようなコードを書くほうが間違ってると思うけどな。
0103 2008/12/07(日) 15:50:16ID:???
>>102
回答ありがとうございます
プログラム(まずはCGI)の勉強のためにPythonを選びました。
何から始めたらいいのか分からなかったので配付されている
PHPのスクリプトをPythonに移植してみようと思い立ちました。
まともに動くようになったら指摘された箇所を見直して見ようと思います。
そこまで理解が深まればの話ですけど。
0104nobodyさん2008/12/07(日) 17:09:45ID:xeKPVS3i
>>> try:
... a
File "<stdin>", line 2
a
^
IndentationError: expected an indented block

except打つまえにこんなの出る
0105nobodyさん2008/12/07(日) 17:20:23ID:???
>>104
http://flickr.com/photos/shinji_i/2282608491/

インデントが必要だと書いてあるだろう
0106nobodyさん2008/12/07(日) 17:27:04ID:xeKPVS3i
>>105
ありがとうございます。できました

>>> a='test'
>>> try:
... a
... except NameError:
... print "a none"
... else:
... print "a is set"
...
'test'
a is set
>>>

...このピリオド3つが最初のインデントだと思い込んでました
0107nobodyさん2008/12/08(月) 19:17:36ID:???
【サンタクロース、トナカイの酒気帯び運用。有罪判決に、マジ逆切れ&大暴れw(動画有り)】(ZDNet)
http://builder.japan.zdnet.com/story_media/20384793/081204_sun-james-gosling_03_400x300.jpg
http://builder.japan.zdnet.com/story_media/20384793/081204_sun-james-gosling_01_400x300.jpg
http://builder.japan.zdnet.com/story_media/20384793/081204_sun-james-gosling_02_400x300.jpg
0108nobodyさん2008/12/09(火) 04:27:12ID:???
locals()
という関数を呼ぶと自分で定義した変数とか関数とかの一覧(+α)が
返ってくるので、それを使うという方法もある。

>>> a=1
>>> 'a' in locals()
True
0109nobodyさん2008/12/09(火) 17:42:11ID:???
web.pyのスレはありますか?
0110nobodyさん2008/12/09(火) 21:35:42ID:???
ありますん
0111nobodyさん2008/12/10(水) 03:03:33ID:???
どっちだよ
0112nobodyさん2008/12/10(水) 14:27:05ID:???
web2py
http://pc11.2ch.net/test/read.cgi/php/1228881994/
0113nobodyさん2008/12/11(木) 05:02:18ID:???
web.pyじゃないです><
0114nobodyさん2008/12/13(土) 00:35:39ID:???
PHP捨ててPythonに乗り換えようとしたけど、
日本語訳マニュアルに誤変換が多すぎてバカっぽいからやめるわ
0115nobodyさん2008/12/13(土) 00:50:53ID:???
PHP使ってる人はPythonやっても幸せになれなさそうだよね・・・
PHPとともに生きるが幸せ
0116nobodyさん2008/12/13(土) 04:04:47ID:h3kmjY+F
ふむ。
一つの言語だけに絞るのもいいかも知れんね。
趣味ならば。
0117nobodyさん2008/12/15(月) 06:54:35ID:sacUpYif
mod_pythonでHTMLがうまく表示できないのはなぜ?

from mod_python import apache

def handler(req):
req.content_type = 'text/html'
req.write("<html><head><title>Hello World!</title></head><body>hoge</body></html>")
return apache.OK

writeの引数のテキストがそのまま表示されてしまう。
0118nobodyさん2008/12/15(月) 13:23:12ID:???
req.headers['content_type'] = 'text/html'
0119nobodyさん2008/12/31(水) 00:18:58ID:FXljk5zO
python 2.5 の cgi プログラムが動作しません。どのような原因が考えられますでしょうか。

自分で確認した事項等は以下の通りです:
・ ローカルでは動作する
・ パーミッションは755になっている
・ アスキーモードで転送している (バイナリモードでも試してみた)
・ 文字コードは UTF-8 で、プログラム内にも # -*- coding: utf-8 -*- としている
・ import したのは cgi, urllib, re, time
・ cgitb を試みたが、使えていない
0120nobodyさん2008/12/31(水) 00:24:43ID:???
shebang
0121nobodyさん2008/12/31(水) 00:30:58ID:???
Pythonへのパスが間違ってるんじゃねえの?
0122nobodyさん2008/12/31(水) 06:43:36ID:???
apacheのログみろ
0123nobodyさん2008/12/31(水) 13:59:27ID:???
>パーミッションは755
これだろ
01241192008/12/31(水) 16:40:57ID:FXljk5zO
>>121 Python へのパス
同じ場所に別のcgiプログラムを置いたところ、パス指定が同じで正常に動作しますので、それはないと思われます。

>>120 >>122 shebang / apache
当方詳しくないものでわかりません、調べてみましたが使い方とかが…

正常に動くプログラムを部分的に改変することにより再現しようとしたら、文字コードを UTF-8 に (同時に、パスの次の行に
# -*- coding: utf-8 -*-
と) したらエラーが発生することがわかりました。
0125fushianasan2008/12/31(水) 17:06:27ID:???
しね
0126nobodyさん2008/12/31(水) 18:04:34ID:kx00N+c5
>>124
UnicodeEncode(Decode)Error
とか出てない?
01271192008/12/31(水) 18:26:15ID:FXljk5zO
>>126
ローカル実行時は出ていません。
サーバ実行時はこんだけです:
500 Error - Internal Server Error
CGIもしくはSSIが正しく動作していません。
0128nobodyさん2008/12/31(水) 18:45:54ID:???
>・ cgitb を試みたが、使えていない

import cgitb; cgitb.enable()
これでもだめ(500 Error - Internal Server Error がでる)って言う意味か?
0129nobodyさん2008/12/31(水) 18:47:20ID:???
>同じ場所に別のcgiプログラムを置いたところ、パス指定が同じで正常に動作しますので、それはないと思われます。

動くものと動かないもののソース晒せ
0130nobodyさん2008/12/31(水) 19:59:42ID:kx00N+c5
解決しました
ありがとうございました
01311192008/12/31(水) 20:38:51ID:FXljk5zO
>>128
そのとおりです。

>>129
動くもの: エンコーディングは ANSI (windows notepad の)
#!/usr/local/bin/python

import cgi
import urllib
from time import localtime, strftime
filename = strftime("./data/hatena%Y%m%d-%H%M%S.html", localtime())
print ""
target = urllib.urlopen("http://www.google.co.jp/")
data = open(filename, "w")
data.write(target.read())
data.close()
print target.read()

動かないもの: エンコーディングはUTF-8
コードはパスの次の行に
# -*- coding: utf-8 -*-
を追加しただけ
0132nobodyさん2008/12/31(水) 22:14:06ID:???
target.read()
二回実行して問題ないんかな
01331192008/12/31(水) 22:29:30ID:FXljk5zO
>>132
UTF-8 でないものは2回実行しても動きます。
UTF-8 のものは1回でも動きません。

どうやら来年に持ち越しのようですね…。
0134nobodyさん2008/12/31(水) 23:03:42ID:???
池■田大■作の本名はソン・テチャク。小泉純一郎、小沢一朗は朝鮮人。
911では小型の水爆が使用されている。
http://ri■ch■ardkosh■im■izu.at.webry.info/
創価の保険金殺人事件。
オウム事件は、統一・創価.北朝鮮の共同犯行である。CIAが監修している。
http://www15.ocn.ne.jp/~oy■ako■don/kok_web■site/ir■iguc■hi.htm
与党も野党もメディアも全部朝鮮人だった。
http://jb■bs.li■vedo■or.jp/b■bs/read.cgi/news/20■92/115794■1306/

2ちゃんねるは統一■教会が個人情報を集めるための道具。運営には統一■教会がいる。
駅前で「手相を見せてください」と勧誘してるのが統一教■会。(カルト宗教)  
カルト宗教の下にいる人と上にいる奴を分けて考えないといけない。下にいる利用される人は上がどんなことをしてるか知らない。

ユダヤ権力の子分→2ちゃん運営=統一協会上層部=層化上層部=自民党清和会=野党の朝鮮人ハーフの政治家=
与党の朝鮮人ハーフの政治家=金 正日(キム・ジョンイル )=読売サンケイ=小沢十朗
ユダヤ人=ロックフェラー=ブッシュ=クリントン=ヒラリー=アドルフ・ヒトラー=オサマ・ビンラディン

毎日新聞スレを荒らしてる奴らも統■一教会の可能性が高い。
荒らしは洗脳するために「ネトウヨ」などのレッテル付けレスを何千回もする。
現実には「ネトウヨ」などは存在しない。
http://changi.2ch.net/test/read.cgi/ms/1230363385/
0135nobodyさん2008/12/31(水) 23:22:47ID:???
>>131
つまりファイルは出来てないんだね
01361192008/12/31(水) 23:38:28ID:FXljk5zO
>>135
公開できない文字列を含む部分などを隠していますが、テストコードの段階であることは確かですね。
しかし、より小さいコードで試した結果などから、原因は文字コード周りにあると考えてよいと思います。
この点についてはサーバ管理者に問い合わせましたが、年末につき返信待ちであります。
0137nobodyさん2008/12/31(水) 23:46:18ID:???
よいお年を
0138nobodyさん2008/12/31(水) 23:47:39ID:???
python初心者がはまる典型的なパターンじゃないかな
0139nobodyさん2008/12/31(水) 23:50:25ID:???
>>136
「ファイルは出来てない」はプログラムが完成していないという意味じゃなくて

<ここまでに死んでるのか
data = open(filename, "w")
data.write(target.read())
data.close()
<この辺で死んでるのか
print target.read()
を知りたかった訳なんだけど
どう?
01401192009/01/01(木) 00:03:06ID:l/3teeKT
年明けとほぼ同時に解決しましたw
悪の元凶: Windows メモ帳
直接原因: UTF-8 には入れるべきでない余分なヘッダ (?) 3バイトがファイル先頭に挿入されていた
対策: バイナリエディタで開いて先頭3バイトを削除して保存しなおす
0141 【大吉】 2009/01/01(木) 00:09:53ID:???
あけおめ
0142nobodyさん2009/01/01(木) 00:11:44ID:???
pythonってBOMに対応してなかったっけ?
0143nobodyさん2009/01/01(木) 00:12:38ID:???
>UTF-8 には入れるべきでない余分なヘッダ (?) 3バイトがファイル先頭に

BOMのことか
それを「UTF-8 には入れるべきでない」っつーのは言いがかりだな
まあそれが原因で shebang が利かなくなってたのは確かだが
Windows メモ帳 を悪の元凶と言うのは素人
0144 【だん吉】 2009/01/01(木) 00:23:45ID:fHn+ttSa
>>142
python自体はBOM付いてても受け付けるけど
shellが解釈する時点でだめでしょ
0145nobodyさん2009/01/01(木) 00:27:57ID:???
悪の元凶: Windows メモ帳
に同意
0146nobodyさん2009/01/01(木) 00:39:00ID:???
△悪の元凶: Windows メモ帳
○悪の元凶: Windows メモ帳を使用
0147 【大凶】 2009/01/01(木) 17:22:06ID:???
あけおめ!
0148nobodyさん2009/01/01(木) 19:22:20ID:???
大凶ワロタw
0149nobodyさん2009/01/02(金) 18:12:01ID:???
>>144
shebangを解釈するのはカーネルだけどね
0150nobodyさん2009/02/13(金) 18:10:26ID:???
Python CGI に <input type="submit"> および <input type="reset"> を書いたとします
それぞれをクリックしたら何が起こるんでしょうか?
0151nobodyさん2009/02/13(金) 19:57:40ID:???
>>150
submit…一緒に出力されているhtmlでsubmitの親ノードになってるformのactionに対して送信する
reset…一緒に出力されているhtmlでresetの親ノードになっているform内のinput/select/textarea等がクリアされる

PythonのCGIって言っても単にブラウザに向かってHTML(たまにCSVとかXMLとかバイナリとか違うものも吐くけど)
を吐き出してるだけなんで、普通のHTMLと同じ挙動をするだけだよ。
01521502009/02/13(金) 20:37:43ID:???
あーごめんなさい、書き方が悪かったみたいですね
その「送信された側」などの関係がわからないのです。
0153nobodyさん2009/02/13(金) 20:43:19ID:???
>>152
ブラウザの実相にもよるけど、大抵のメジャーブラウザはresetはサーバーとの通信を
行わずローカルだけでやるはずなので、送信元になるのが何であっても(静的HTMLでも、
PythonのCGIが吐き出したHTMLでも、PHPやPerlCGIが吐き出したのでも)同じ動きです。

formからの送信を受け取る側がPythonのCGIなら、↓参照
http://www.python.jp/doc/release/lib/module-cgi.html
01541502009/02/13(金) 22:21:19ID:???
>>153
そうです、そこ見てたんですよ。
Python 勉強しはじめて、ローカルで動くプログラムはいろいろ書いてはいるんですが
送信側と受信側との関係? というか…
FieldStorage() して getlist(name) というのはわかったのですが
どうやってデータをここに入れてあげればいいのかが…
0155nobodyさん2009/02/13(金) 23:19:15ID:???
>>154
他の言語(Perl,PHP.Rubyなど)でHTTPサーバー⇔ローカルの通信やったことありますか?

<form action="python.cgi" method="post">
<input type="text" name="hoge" value="mage" />
<input type="submit" value="送信" />
<input type="reset" value="リセット" />
</form>
というHTMLがあったとして、

submitする…cgi.FieldStorage()するとform["hoge"].valueにmageが入る

resetする…サーバーと通信は行わずローカルのブラウザ側でinput type="text"のvalueをクリア
01561502009/02/13(金) 23:39:29ID:???
まったくないですね… なるほど Python に限った話じゃないからリファレンス見てもほとんど書いてなかったのか

上のコードの場合、FieldStorage() は python.cgi の中でするんでしょうか。これで合ってれば、ほぼ理解できました。
0157nobodyさん2009/02/13(金) 23:42:06ID:???
>>156
cgi.FieldStorage()は通信を受け取った側(>155のHTMLをそのまま使うとすると、おっしゃる通りpython.cgiの中で)
することになります。

↓に少しサンプルがあるので見てみてください。
http://www.python.jp/doc/release/lib/node561.html
01581502009/02/14(土) 00:26:36ID:???
なるほど、よくわかりました。ありがとうございます!
サンプルの方は既に見てましたよ〜。
0159nobodyさん2009/02/14(土) 09:03:11ID:???
ttp://www.amazon.co.jp/dp/4797341815/

入門書嫁。
01601502009/02/14(土) 16:20:41ID:???
問題がHTMLフォームの挙動を十分に理解していないことにあるとわかったので
http://www.kanzaki.com/docs/html/htminfo31.html htminfo32.html htminfo33.html を読んですっきりしました。
0161nobodyさん2009/02/15(日) 14:00:15ID:???
こういう人は、皮肉でもなんでもなくPerlCGIから入った方がいいような気がする。
WEBアプリ、特にCGIの入門者が躓きやすいところの情報は、未だにPerl CGIの頃の情報が一番豊富だろ。

んで、悪い癖がつく前にPythonなりRubyなりに移行すれば(またはしなくても)いいんじゃないかと。
0162nobodyさん2009/02/15(日) 22:49:01ID:???
ほぼ同意だけどPHPのほうが良いと思う。
WEBに特化してるだけあってそのあたりのことも
マニュアルで解説されてる。

ただし、Perl以上にPHPのほうが癖が強かったりする。
0163nobodyさん2009/02/18(水) 19:38:12ID:q8sXwxpK
cgiの仕様は糞
checkboxの受け取り方とかタヒネとか思う
0164nobodyさん2009/02/19(木) 19:04:35ID:???
タヒネってなんですか?
0165nobodyさん2009/02/19(木) 22:50:20ID:???
人生そのものだよ
0166nobodyさん2009/04/26(日) 16:13:15ID:+askKVed
質問です。
PythonをWebアプリからはじめて
ゆくゆくはGUIもやってみたいなと思ってる初心者ですが
オススメの書籍は>>159の他にありますか?
Webアプリのセキュリティあたりにも触れているととても幸せです。

現在チュートリアル見てちまちまと勉強中です。
ソースコードがシンプルで好きになれそう…
0167nobodyさん2009/04/26(日) 16:14:58ID:???
pythonをwebで使うならDjangoのようなフレームワーク使うのが良いと思うね
0168nobodyさん2009/04/26(日) 16:19:43ID:+askKVed
>>167
いずれはそうしたいと思うんですが
はじめからFWやると細かい部分吸収されちゃって学習出来なさそうなんで
俺俺FW作りつつ勉強してみたいなと思ってます
0169nobodyさん2009/04/26(日) 18:29:24ID:???
Webアプリ作っていくならPython本より他の本読んだ方がマシだと思われ
身になること書いてないしサンプルコードとモジュールのソースコード読みながらやっていく方が楽だ
01701662009/04/26(日) 18:42:27ID:???
出先からですが、解答ありがとう
書店きてみましたがPython本の品薄っぷりに泣きました。
暫らくWeb上で調べながらやってみます!
0171nobodyさん2009/05/05(火) 22:09:13ID:???
WSGIの質問はここでいいですか?
0172nobodyさん2009/05/07(木) 09:59:48ID:???
どうぞ
0173nobodyさん2009/06/10(水) 09:52:49ID:???
質問です!
最近、BlackJumboDogを使ってWindowsXPでWEBサーバを立てたのですが
PerlとRubyは動くのにPythonが動きません。
cmdから「perl -v」「python -v」「ruby -v」をやるとエラーの雰囲気は無い応答が帰ってくるので
問題ないとおもうのですが、何か原因がわかるかたいますか?
ちなみに「python -v」を打ち込むとperlやrubyではバージョンとかが出るのですが
pythonだけ対話モードみたいなのに入ります。
cgiの中身は以下のようになってます。

#!/python

# -*- coding: utf-8 -*-
import cgi
import cgitb
cgitb.enable()

print "Content-Type: text/html"
print
print "hello world."

アクセスすると真っ白です。
どなたかお助け願います。お願いしますよろしくお願いします!
0174nobodyさん2009/06/10(水) 22:27:31ID:???
どうやらインタープリターの呼び分けが
ハードコーディングされてるっぽいから
単にPythonに対応してないんでしょ。

ApacheやIISの方が、導入敷居が高くても
結局は情報がたくさんそろっててはまりづらいと思うよ。
■ このスレッドは過去ログ倉庫に格納されています