Pythonのお勉強 Part ..
243:デフォルトの名無しさん
08/05/10 03:13:59
>>242
ファイルにあるやつなら insepct.getsource で取れる
244:デフォルトの名無しさん
08/05/10 04:27:34
>>169
Parallel Python というパッケージがあるのを知ったので参考までに紹介しとく。
URLリンク(www.parallelpython.com)
スレッドじゃなく複数プロセスで並列実行する仕組みらしい。
Python のみで実装されていて非常にシンプルなパッケージ構成になっている。
マルチコア環境の場合はスレッドモジュール風に使える。
クラスタ環境では各ノードで計算サーバ(ppserver.py)をしておく仕組みになっている。
応用プログラムはどちらの環境でも同じにできるっぽい。
手元の共有メモリマシンで付属サンプル(sum_primes.py)を実行したら下のようになった。
素数の和を計算するプログラムなのでプロセス間通信はほとんどないけど、
並列化のオーバヘッドはあるわけで、なかなか良好な結果だと思う。
並列度,実行時間(秒),速度向上率
1, 17.54, 1.000
2, 8.781, 1.998
4, 4.424, 3.965
8, 2.261, 7.759
245:169
08/05/10 13:53:14
>>244
おおお,サンクス!
早速いじってみまふ。
246:デフォルトの名無しさん
08/05/10 14:12:25
どうでもいいから
ちゃっちゃとpygameの資料和訳
作業に入れよ。
非国民か?
247:デフォルトの名無しさん
08/05/10 14:41:50
>>246
国際人には和訳などいらんのだよ
248:デフォルトの名無しさん
08/05/10 14:46:02
真の国際人は地域文化を尊重するものだ
と混ぜっかえしてみる
249:デフォルトの名無しさん
08/05/10 14:48:20
地域文化を尊重するから
現地の言葉を尊重するのだよと
250:247
08/05/10 14:48:29
>>248
(・ω・)つ おざぶとん
251:デフォルトの名無しさん
08/05/10 15:03:20
早く日本語化プロジェクトに参加しろよ。
お前らにpygameの未来がかかっている。
252:デフォルトの名無しさん
08/05/10 15:13:29
ユーザからの入力を正規表現で処理したいと思ってます。
入力された文字列に正規表現が含まれてる場合にそれをエスケープしたいんだけど、どうやったらいいのかわかりません。
誰か助けてプリーズ・・・
253:デフォルトの名無しさん
08/05/10 15:16:19
英語も読めないようなやつがpygameを使えるようになるとは考えにくい。
254:デフォルトの名無しさん
08/05/10 15:57:14
たぶんリファレンスの和訳よりも、各オブジェクトを絡ませた逆引きサンプルコードみたいのが需要あると思うよ。
扱い方が理解できりゃオブジェクト名で大体想像できるし
255:デフォルトの名無しさん
08/05/10 16:08:18
リファレンスぐらいなら簡単に訳せそうに見えるね
試しにpygame.cdromモジュール使ってみたけど対話型シェルから
簡単にトレイの開閉とか再生できておもすれー
かなりよく抽象化されてて使いやすそう
256:デフォルトの名無しさん
08/05/10 16:10:06
>>252
re.escapeは試してみた?
257:デフォルトの名無しさん
08/05/10 16:22:06
> リファレンスぐらいなら簡単に訳せそうに見えるね
簡単に訳せる文章、英文でも理解できる文章は、労力をかけて訳してもしょうがないっしょ
邦訳することが目的になっている感じだし、目的が変化している
核となるもの、肝となるもの、大事な概念だけど理解しにくいものを中心に
Pygameに興味のある者が理解しやすい仕組み・しかけをつくるほうが大事
とりあえず、目的・問題の明確化をさせたほうがいいんじゃないの?
258:252
08/05/10 16:46:20
>>256
できましたありがとー!
(_アンダースコアもエスケープされちゃうのがナゾですが・・・)
259:デフォルトの名無しさん
08/05/10 19:07:41
このスレッドの目的は
pygame文書の和訳という使命を帯びた事が証明されたわけだ
260:デフォルトの名無しさん
08/05/10 19:28:29
よし、wxpythonの和訳が終わったらpygameも和訳するぜ
まだ、何もやってないけど
261:デフォルトの名無しさん
08/05/10 19:43:09
Pygameのドキュメントだけ見てもよくわからないけど
SDLの方のドキュメントを読むと理解できる事も多いよね
262:デフォルトの名無しさん
08/05/10 20:39:56
お前らは早くpygameの和訳作業にとりかかれ
263:デフォルトの名無しさん
08/05/10 20:44:07
英語も読めない低脳は黙ってろ
264:デフォルトの名無しさん
08/05/10 21:01:38
ここの基準はPythonが書けるかどうかで決まるんだぜ(藁)
265:デフォルトの名無しさん
08/05/10 21:02:23
Pyhton
266:デフォルトの名無しさん
08/05/10 21:04:17
pyてょn
267:デフォルトの名無しさん
08/05/10 21:31:23
oh tyPo
268:デフォルトの名無しさん
08/05/10 21:34:00
○〜〜 ○〜〜 ○〜〜
○〜〜 ○〜〜 ○〜〜
○〜〜 ○〜〜 ○〜〜
269:デフォルトの名無しさん
08/05/10 21:52:46
sperm, sperm, sperm and sperm.
270:デフォルトの名無しさん
08/05/10 21:54:07
まず pygame を何と訳したらいいのかわかりません
271:デフォルトの名無しさん
08/05/10 21:58:25
pygame でいいじゃん
272:デフォルトの名無しさん
08/05/10 22:07:29
随時出張してきてもいいが、本スレに帰れ
あとpygame翻訳と最初に騒いだヤツは、もうマルチするなよ
次スレからちゃんとテンプレに追加してやるから
【pygame】pythonでゲーム製作【ぱいがめ】
スレリンク(gamedev板)
>>270
Python + game = Pygame
こういう組み合わせの名前(造語)って代表的なのってなんだろう?
273:デフォルトの名無しさん
08/05/10 22:25:32
pychinko
274:デフォルトの名無しさん
08/05/10 22:59:17
pygameの和訳を済ませろボケナスども
275:デフォルトの名無しさん
08/05/10 22:59:58
乳遊
276:デフォルトの名無しさん
08/05/10 23:30:28
自己解決の次は翻訳か
277:デフォルトの名無しさん
08/05/10 23:37:22
>>272
PyPI, PyPy
278:pygame和訳wiki”管理”者
08/05/10 23:44:29
事故解決しました
279:デフォルトの名無しさん
08/05/10 23:49:25
つまんね
280:244
08/05/10 23:51:28
引続き Parallel Python をいじってみたんだけども、このシステムはマスタワーカモデルを前提にしているみたいだ。
つまり、マスタが仕事の集合を持っていて、有限個のワーカに1つずつ仕事を割り当てる。仕事を終えたワーカは
マスタから新しい仕事をもらって処理する。これを仕事の集合が空になるまで続ける。
ワーカ間で通信をする機能は提供されていないし、特定のワーカ(たとえば特定のリモートホスト上のppserver.py)に
特定の仕事を割り当てることもできないっぽい。Parallel Python が有効かどうかは実現したい並列アルゴリズムが
マスタワーカモデルに適合するかどうかに依る希ガス。
281:デフォルトの名無しさん
08/05/11 00:26:06
おっpydev
282:デフォルトの名無しさん
08/05/11 00:37:49
pygameの和訳が進んでいるか、
確認のために毎日一回以上は
pygame関連の話題を出すようにしようぜ
反論がある奴は似非python使いとして認定してやろうぜ
283:デフォルトの名無しさん
08/05/11 00:40:31
>>280
具体的には、どういう用途に使えそうなんですか?
284:244
08/05/11 00:59:44
>>283
pygameかな
285:デフォルトの名無しさん
08/05/11 01:34:00
>>283
最も適しているのは並列処理の分野で embarrassingly parallel と呼ばれるカテゴリに属する種々の計算、
すなわち入力データを複数の独立した部分に分割できて、各部分について他から独立して計算が行なえる
タイプの用途に適している。
URLリンク(en.wikipedia.org)
Wikipediaに例があがっている。フラクタル計算とか3DCGのレンダリング(例:レイトレーシング)とか力任せの
暗号解読とか色々ある。
並列処理って概して複雑で長時間計算し続ける必要のある応用が多い。そういう応用には C とか Fortran を
使うことがほとんどなんだけど、きちんと動くようになるまでの開発時間が長くてデバッグがたいへんだったりする。
そういう並列プログラムの試作(プロトタイピング)に Python が使えたらいいなーと個人的には思っている。
286:デフォルトの名無しさん
08/05/11 08:49:01
>>274
おまえにいいこと教えてあげよう。
市場の中の肉屋さんいって、
「ホースください」頼んでみ。
解体処理した豚の膣の部分がもらえる。
ほんとは金かけて廃棄しないといけない部分だから無料でもらえる。
食い物にはならないから。
この豚の膣が極上。
まあ考えたら膣だからな。
人間のじゃないだけで本物の膣だから、気持ちよくて当たり前。
287:252
08/05/11 09:30:17
re.escapeってなんでもかんでもエスケープしちゃうのか・・・
\山\田\太\郎て
288:デフォルトの名無しさん
08/05/11 09:43:58
>>285
PythonでCPU8個使って並列計算するよりCで書いたプログラムの方が速そうだったり。。。
289:デフォルトの名無しさん
08/05/11 09:57:09
>>288
何言ってんだ?
290:デフォルトの名無しさん
08/05/11 10:28:52
>>289
あ?ヤンのかコラ
291:デフォルトの名無しさん
08/05/11 11:21:19
URLリンク(www.geocities.jp)
292:デフォルトの名無しさん
08/05/11 11:21:53
>>286
ついでに言うと豚の内臓と人間の内臓はかなり近いらしいね
豚の心臓を人間に移植した話もあるからな
293:デフォルトの名無しさん
08/05/11 12:13:17
>>292
羊の膣も極上という話だけどどうなのだろうね?
294:デフォルトの名無しさん
08/05/11 12:14:24
膣なんてどうでもいいから
チャッチャとpygame資料の和訳作業に務めろ糞野郎共
295:デフォルトの名無しさん
08/05/11 14:39:25
>>285
自分も並列化するときのプロトタイプとしてPythonの並列環境を使ってみたいと
考えているんだけれど、今のところプロトタイプとしての感触はどう?
データ分割の楽な問題ってCとかFORTRANでもOpenMPを注意深く使うだけでも早くなる事が
多いし、MPIでも慣れれば苦労せずに書けるけれど、そうでない、スレーブ間での通信が必要
とかうまく分割できないとかそういう問題はMPIでやろうとするとデバッグが(;゚д゚)
なことになりがちで、そういう用途にPythonのプロトタイプが役に立つなら素晴らしいと思う
実はC並列版とそれほど速度とメモリ使用量が変わらないとかなら最高
C並列版より速ければ神
296:デフォルトの名無しさん
08/05/11 16:53:12
Parallel Python だけど pp.Server.__scheduler() を適当に書き直せばワーカと仕事の対応(割り当て)を
ユーザ側で決められそうな希ガス。問題はワーカ間のプロセス間通信。これが一番面倒なところなんで
自前で実装となると Parallel Python を使ううまみがほとんどない・・・。
やっぱ MPI の Python バインディングあたりが一番現実的な解かなー。でもなんか気が重いんだなー。
もっと Python らしく lightweight なソリューションがないかなー。
>>288
Python の並列プログラムより C の逐次プログラムの方が速そうってことだよね。
そういうことは十分(多分頻繁に)あると思われ。
>>295
残念ながらまだ並列プログラムのプロトタイプ用途には使えてなくて感触を得るところまでいってない。
理由は単純で、Python で手軽に並列プログラミングを実現できる道具を見つけられていないから。
>>209に書いたようにいろいろ試してるんだけどなかなか・・・。
ただ、個人的には Python を並列化のプロトタイピングに使うのは大いに有望だと思っている。
プロトタイピングの場合、欲しいのは並列度やデータ量を上げたときの実行時間の変化であって、
実行速度が多少遅くて実験に時間がかかるとしても知りたいことは分かるはずだから。
プロセス間通信にソケットを使うとすると、データ量が大きくなれば Python でも C 等と同じぐらいの
速度が出る(ハズ)。演算量が多い部分に numpy 等の C/Fortran で書かれた数値カーネルを使うことに
すれば、プロトタイピング用途には十分な速度とメモリ使用量が得られるのではと思う。
297:デフォルトの名無しさん
08/05/12 01:33:26
Linux で wxPython をコンパイルしようとして、
URLリンク(ymasuda.jp)
ここを参考に進めて行ったんだけど、最後の
python setup.py install
を実行したところでむちゃくちゃエラー吐いて止まるんだけど・・・
一部だけエラーを載せるけど、同じファイルのエラーが延々と120行近くでるんだ。
contrib/glcanvas/gtk/glcanvas_wrap.cpp:2739: error: 'wxGLCanvas' was not declared in this scope
contrib/glcanvas/gtk/glcanvas_wrap.cpp:2739: error: 'arg1' was not declared in this scope
contrib/glcanvas/gtk/glcanvas_wrap.cpp:2739: error: expected primary-expression が ')' トークン前にあります
contrib/glcanvas/gtk/glcanvas_wrap.cpp:2739: error: 数値定数の前に expected ';'
「glcanvas_wrap.cpp wxPython」で検索したら英語で色々皆同じ問題にあってるみたいだけど、解決方法を探せなくて(読めなくて)困ってます・・・教えて!エロイ人!
298:デフォルトの名無しさん
08/05/12 02:10:10
config.py(setup.py?)のBUILD_GLCANVASを0にしてみたら?
299:デフォルトの名無しさん
08/05/12 08:47:31
>>297
どのディストリ使ってるのか不明なんだけど、
バイナリパッケージでは存在してないの?
300:デフォルトの名無しさん
08/05/12 17:11:39
単なる興味なのですが、Unicode文字列と等価なバイト列を得る方法をご教示頂けないでしょうか?
'hello'と等価なバイト列は'\x68\x65\x6c\x6c\x6f'です。
で、u'hello'と等価なバイト列は、例えば'\xff\xfe\x68\x00\x65\x00\x6c\x00\x6c\x00\x6f\x00'
と思うのですが、pythonで両者の直接変換はできるのでしょうか?という質問です。
u'hello'.encode('utf-16')がほぼ等価ですが、これはあくまでエンコーディングなので、
直接バイト列を得てるわけじゃないのかな、と思った次第です。
301:デフォルトの名無しさん
08/05/12 17:19:12
内部表現はUCS2かUCS4だったと思うのだが
中身に触る方法はないほうがいいんじゃないかな
302:デフォルトの名無しさん
08/05/12 17:23:20
ord 関数じゃダメなんすか
303:デフォルトの名無しさん
08/05/12 20:12:59
>>300
文字列はエンコーディングを決めなければバイト列では表現できないよ。
> 'hello'と等価なバイト列は'\x68\x65\x6c\x6c\x6f'です。
ここで実は300さんはエンコーディングとして ASCII を仮定している(ASCII をサブセットとして含む
別のエンコーディングかも知れない)。例えば、もし EBCDIC を仮定していたら別のバイト列になる。
> pythonで両者の直接変換はできるのでしょうか?
エンコーディングが分かっていればご存知の通り unicode() と .encode() で可能。
304:デフォルトの名無しさん
08/05/12 20:39:43
print repr([u'hello'])
305:297
08/05/13 01:30:38
>>297です。
>>298-299
大変申し訳ない。
上記URLの、下記の文をすっとばしてました・・・。
cd $WXDIR (ソースツリーに移動する)
mkdir bld (ビルドディレクトリ bld を作成)
cd bld (ビルドディレクトリに移動)
../configure (configure を実行)
一番最初からやり直したらエラーを吐かなくなったよ。
でも、色々可能性を考えて下さってありがとうございました。
お騒がせしてしまい申し訳ございませんでした。
306:デフォルトの名無しさん
08/05/13 08:29:09
>>305
うわ、ビルド方法が面倒くさいね
307:デフォルトの名無しさん
08/05/13 10:12:52
>301
ないほうがいいってことはないでしょ
初心者が文字列操作で使うべき方法として
提示されるかどうかはともかく
308:デフォルトの名無しさん
08/05/13 11:09:48
>>> repr(unicode('あいうえお'))
"u'\\u3042\\u3044\\u3046\\u3048\\u304a'"
>>> unicode('あいうえお').encode('unicode_escape')
'\\u3042\\u3044\\u3046\\u3048\\u304a'
>>> unicode('あいうえお').encode('raw_unicode_escape')
'\\u3042\\u3044\\u3046\\u3048\\u304a'
>>> unicode('あいうえお').encode('unicode_internal')
'B0D0F0H0J0'
好きなのを選べ
309:300
08/05/13 12:46:51
>>301-304
>>307-308
皆様ご助言どうもありがとうございました。
>>302 >>308さんご提示の、コードポイント取得方法が私の期待に非常に近いものでした。
ですがそもそも、>>303 さんご指摘の通り、私には「バイト列はエンコーディングによって
はじめて定義されるもの」という認識が甘かったように思います。
私が例示したu'hello'のバイト列は、既に何かのエンコーディングが施されたもののはずだから、
そのバイト列と.encode(...)は全く等価ですね。
御蔭様で理解が深まりました。ご教示どうもありがとうございました。
310:デフォルトの名無しさん
08/05/13 15:58:29
最近の初心者は文体が丁寧だな
311:デフォルトの名無しさん
08/05/13 16:13:00
いいことじゃないか。
312:デフォルトの名無しさん
08/05/13 18:42:46
ipython1.0 は並列に対応しているみたいだね
使ってみたいがインストールできないorz
313:デフォルトの名無しさん
08/05/13 20:05:48
threading.threadで作ったスレッドをKillするにはどうすればええの?
class myThread(threading.Thread):
alive = True
def run(self):
while self.alive:
""" なにか """
def kill(self):
self.alive = False
こういうのじゃなくて、イメージとしては
threading as th
myth = th.Thread()
myth.start()
print "あへあへ"
myth.kill()
みたいな。
314:デフォルトの名無しさん
08/05/13 20:27:04
無理。
他のOSネイティブなスレッドでも、そういう手段は用意されていないか
用意されていても推奨されていない。
315:デフォルトの名無しさん
08/05/13 20:33:36
基本的にスレッドはスレッド自身で終了させた方がいいよ
316:デフォルトの名無しさん
08/05/14 00:04:03
URLリンク(www.devchix.com)
> Kamaelia: The future of Python Frameworks looks promising.
317:デフォルトの名無しさん
08/05/14 06:37:55
とりあえず clss GetBBC はよしたほうがいいな
318:デフォルトの名無しさん
08/05/14 17:22:08
URLリンク(groups.google.com)
空のtxtファイルが出来る言ってるから、日本語通らない?
とかスレ違い気味だけど聞いてみる
319:デフォルトの名無しさん
08/05/14 19:29:11
日本語でおk
320:デフォルトの名無しさん
08/05/16 19:23:25
ウェブアプリを作りたいなと思い、教育用らしいPythonを始めようと思うのですが
XAMPPみたいにアーカイブを展開するだけで
ApacheとPythonのApacheモジュールが使えるようになるWindows向けソフトとかありますか?
お手軽な感じで始めたいです
321:デフォルトの名無しさん
08/05/16 19:30:13
cd htdocs
C:\Python25\python.exe -m CGIHTTPServer
Pythonだけでできるよ。apacheなんてイラネー
322:デフォルトの名無しさん
08/05/16 19:55:26
320です
どうもありがとうございます
ブラウザで表示確認できるんでしょうか
よくわからないので調べてきます
ほんと無知ですみません
323:デフォルトの名無しさん
08/05/16 22:07:06
CGIHTTPServer にあったディレクトリのバグは直ったんだろうか?
324:デフォルトの名無しさん
08/05/16 22:13:14
これ?
URLリンク(svn.python.org)
>[Bug #737202; fix from Titus Brown] Make CGIHTTPServer work for scripts in sub-directories
325:デフォルトの名無しさん
08/05/17 00:01:14
>>321
終了のしかた教えて
326:デフォルトの名無しさん
08/05/17 01:59:21
Python の C コード書くときのコーディング規約って、みんなちゃんと守ってる?
どこまで守ってる?
static PyObject *
Hoge(........)
{
•関数の戻り値型の直後に改行を入れる
•関数ブロックの始まりの括弧の直前で改行する
if (a + b + c) {
}
•関数以外のブロックは、始まりの括弧を行末に置く
•括弧の中に余分な空白を入れない
•二項演算子の両側には空白を置く
X return ( expr );
O return expr;
•冗長な括弧は使わない
327:デフォルトの名無しさん
08/05/17 06:14:03
>>325
Ctrl + D とかじゃないの
328:デフォルトの名無しさん
08/05/17 10:01:43
>>326
そんな規約があるとは知らなかった。
329:デフォルトの名無しさん
08/05/17 10:10:11
>>326
URLリンク(www.python.org) の下のどこかにあります?
330:デフォルトの名無しさん
08/05/17 10:59:22
どう見てもPEPだろ
331:デフォルトの名無しさん
08/05/17 11:14:13
WindowsならCtrl+ZのあとにEnter
でも最初の表示どおりhelp→help()→quit→quit()と入力していってほしいかも。
332:デフォルトの名無しさん
08/05/17 11:49:46
>>328,329
PEP 7 -- Style Guide for C Code
URLリンク(www.python.org)
333:デフォルトの名無しさん
08/05/17 14:47:26
>>321 >>327 >>331
ありがとうございます
Windows で python -m CGIHTTPServer を実行しています
Ctrl + C
Ctrl + D
Ctrl + Z
どれもダメだったのでタスクマネージャーから殺したら終了出来ました
あとでわかったのですが、
Ctrl + C
を押したあとにブラウザの更新ボタンで再度リクエスト投げると
Keyboard Interrupt
が出て終了するようです
Windows だから select で監視出来ていないということでしょうか?
334:デフォルトの名無しさん
08/05/17 15:22:22
単純にaccept()がブロックしてるだけでしょ
try節で囲むかtelnet localhost 80とかやってから落とせばいい
335:デフォルトの名無しさん
08/05/17 15:44:26
>>333
普通のCGIがやりたいの?
ApacheでCGIがやりたいの?
320を読む限りではGoogle App Engineとかそういうのが近いのかな?
GAEはお勧めしないけど。
336:デフォルトの名無しさん
08/05/17 19:40:24
>>335
320ですが320は322しか書き込みしていません・・・
私とはしたいことが異なるのではないかと思います
あと、質問してもよろしいでしょうか
じつはまだサーバ上でファイルを実行できていないんですが、そのことについて・・・
CGIHTTPServer.pyを起動させて
htdocsフォルダを作って
まだpythonのスクリプトが書けないので既存のスクリプトファイル
(URLリンク(python.rdy.jp)のcheck.cgiとexplore.cgi)を
URLリンク(localhost:8000)
に入れて表示させてみたのですが
ieだとそのまま中身のテキストが表示され
firefoxだとcgiファイルのダウンロードが始まってしまいます
拡張子をpyに変えてみたらie、firefoxともそのまま中身のテキストが表示されます
cgi-binフォルダを作って
同様に既存のスクリプトファイルを
URLリンク(localhost:8000)
に入れて表示させてみたら
拡張子がcgiだと
ie、firefoxともに
> Error response
> Error code 403.
> Message: CGI script is not executable ('/cgi-bin/check.cgi').
> Error code explanation: 403 = Request forbidden -- authorization will not help.
と表示されます
拡張子をpyに変えてみたら
ie、firefoxともに真っ白な画面が表示されます
うまく実行させるにはどうすればいいのでしょうか・・・
337:デフォルトの名無しさん
08/05/17 20:05:18
それsh辺りのスクリプトだからwinじゃ動かないよ
.pyに変えたらコマンドプロンプトにエラーメッセージが表示されてるからよく嫁
とにかくエラーメッセージはきちんと嫁
338:デフォルトの名無しさん
08/05/17 20:05:43
Apacheの場合、デフォルトで
* htdocsにはHTMLおよび画像ファイル
* cgi-binにはCGIスクリプト
と分けて設置しなければいけない。
CGIHTTPServerでも似たようなものだと思う
> Message: CGI script is not executable ('/cgi-bin/check.cgi').
とりわけ使ってるのがLinuxなら
CGIスクリプトの一行目にshebang入れてchmod +xしなきゃだめ
WindowsだとWebサーバにもよるけどshebangは必要かも
339:デフォルトの名無しさん
08/05/17 20:08:17
ああほんとだ。見てなかった >sh辺りのスクリプト
explore.cgiはPythonで書かれてるから動くんじゃないかな
340:デフォルトの名無しさん
08/05/17 20:13:03
>>336
htdocs フォルダが My Documents みたいにスペースの入ったフォルダの配下にない?
341:デフォルトの名無しさん
08/05/17 20:16:50
>>337-340
336です
親切にどうもありがとうございますm(_ _)m
ただ話の内容が難しくて理解が追いついていません・・・
windows上で使っています
いつかはレンタルサーバを借りて動かしたいと思っているのですが
windowsとlinuxでスクリプトの書き方(?)が異なるのでしょうか・・・
コマンドプロンプトにメッセージが表示されるんですね
読んでみます
テスト用に選んだスクリプトも選択ミスだったんですね
パスにスペースは入っていません
ピリオドと数字は入っています
エラーメッセージをよく読みます
342:デフォルトの名無しさん
08/05/17 20:35:42
実際に試してきた
1. c:\cgi-bin\ に env.py を置く
import os
print 'Content-type: text/plain\n\n'
for key in os.environ:
print '%s: %s' % (key, os.environ[key])
2. cd c:\ して python -m CGIHTTPServer する
3. ブラウザで localhost:8000/cgi-bin/env.py にアクセス
環境変数がずらっと表示されたら成功
Windowsの場合、shebang も chmod +x も必要ないが
拡張子は .py にしないと動かないみたい
あと My Documents みたいなフォルダの配下だとこけるのは
>>340が指摘してくれている通り
343:デフォルトの名無しさん
08/05/17 21:01:56
>>342
336です
env.pyはうまく動きました!と思います
45行ほどの文字列が表示されました
explore.pyもうまく表示されました
表データが表示されました
cgi-binに拡張子をpyにして入れるんですね
初歩的なことに付き合っていただき
みなさん
ありがとうございますm(_ _)m
344:デフォルトの名無しさん
08/05/17 21:10:10
めずらしくpythonのお勉強なんかやってるやつがいるな
345:デフォルトの名無しさん
08/05/17 21:34:07
まだpythonにたどり着いてない気が…
346:デフォルトの名無しさん
08/05/17 21:44:28
c:\ に置かせようとするセンスが理解出来ん
347:デフォルトの名無しさん
08/05/17 21:50:30
センスっつーより悪意を感じる
348:デフォルトの名無しさん
08/05/17 22:13:52
拡張子がcgiでも関連付けでpythonを起動してやるようにすれば動くかもしれない。
実行可能ならbatなんかでもCGIとして動作するみたいだから。
349:デフォルトの名無しさん
08/05/19 16:39:43
こんにちは。いつも参考にさせていただいております。
さて、早速なのですがPythonでテキストファイルへの書き込みは出来るのですが追加の書き込みの方法がわかりません。
一度内容を読み込んで結合してから書き込んでもよいのですがあまりスマートとは思えませんでしたのでここに投稿した次第です。
方法をご教授いただければ幸いです。
350:デフォルトの名無しさん
08/05/19 16:42:06
open(path, 'a')
351:デフォルトの名無しさん
08/05/19 16:48:57
レスありがとうございます。解決いたしました。
352:デフォルトの名無しさん
08/05/19 20:59:01
下記をCGIとして動かしてみたところ、何も表示されません。
# -*- coding: utf-8 -*-
import os
import cgi
import cgitb; cgitb.enable()
print "Content-Type: text/plain\n\n"
form = cgi.FieldStorage()
if not (form.has_key("name") and form.has_key("addr")):
print "<H1>Error</H1>"
print "Please fill in the name and addr fields."
return
print "<p>name:", form["name"].value
print "<p>addr:", form["addr"].value
以下は動作するのでバーミッションの設定ではないと思います。
# -*- coding: utf-8 -*-
import os
import cgi
import cgitb; cgitb.enable()
print "Content-Type: text/plain\n\n"
print "hoge"
解決策など示していただければ幸いです。
353:デフォルトの名無しさん
08/05/19 21:06:40
returnが関数外じゃない?
354:デフォルトの名無しさん
08/05/19 21:18:28
すいません。インデントが外れていたので
URLリンク(codepad.org)
URLリンク(codepad.org)
355:デフォルトの名無しさん
08/05/19 21:30:37
return→sys.exit()に
356:デフォルトの名無しさん
08/05/19 21:33:21
いや、だから>>353
が言っているように、関数内じゃないのに
returnがあるのがおかしいんじゃないの
# -*- coding: utf-8 -*-
import os
import cgi
import cgitb; cgitb.enable()
def main():
print "Content-Type: text/html; charset=UTF-8\n\n"
form = cgi.FieldStorage()
if not (form.has_key("name") and form.has_key("addr")):
print "<H1>Error</H1>"
print "Please fill in the name and addr fields."
return
print "<p>name:", form["name"].value
print "<p>addr:", form["addr"].value
if __name__ == '__main__':
main()
357:デフォルトの名無しさん
08/05/19 21:34:44
apacheならerror_log(error.log)に出なかったっけ
358:デフォルトの名無しさん
08/05/19 21:38:05
pychecker, pylintあたりで文法チェックしといた方がいいかもね
359:デフォルトの名無しさん
08/05/20 06:24:41
>>355でFAもいいところなわけだが
360:デフォルトの名無しさん
08/05/20 13:59:12
URLリンク(codepad.org)
関数の引数って参照渡しなの?
Traclight/plugins/themaengine/api.py
あとTracってAPacheがないと動かせないですか?
PythonをUSBメモリに入れて持ち運びたい(できればtracも持ち運びたひ…)
361:デフォルトの名無しさん
08/05/20 14:50:11
>>360
>関数の引数って参照渡しなの?
そうだよ。入門書嫁。
362:デフォルトの名無しさん
08/05/20 14:54:54
どんな入門書だよ
363:デフォルトの名無しさん
08/05/20 14:55:42
>>360
いっちゃうと代入も何もかもぜんぶ参照渡しです。
だから逆に参照渡しという概念がでてこない。
TracはFastCGIやWSGIでも動作するからApacheじゃなくてもいい。
lightyなんかいいとおもう。
あとWindows版Pythonならパスが変わっても動作するはず。
364:デフォルトの名無しさん
08/05/20 15:08:52
>>362
まともな入門書にはたいてい書いてあるよ
365:デフォルトの名無しさん
08/05/20 15:09:35
Pythonって参照渡しって言うのかな
>>> def foo(x): x = 2
...
>>> a = 1
>>> foo(a)
>>> a
1
いわゆる参照渡しだと、aの値が書き換えられるんじゃないの
366:デフォルトの名無しさん
08/05/20 15:10:56
>>365
def foo(&x): x = 2
これでOK
まともな入門書にはかいてあるよ
367:デフォルトの名無しさん
08/05/20 15:15:57
>>366
つまり、「何もかもぜんぶ参照渡し」というわけでなく、
特に指定しなければ値渡し、ということじゃない?
368:デフォルトの名無しさん
08/05/20 15:16:42
参照をリファレンスという意味で使ったなら
ある意味正しいと思う
369:デフォルトの名無しさん
08/05/20 15:21:18
>>> def foo(&x): x = 2
SyntaxError: invalid syntax
ついに嘘書く奴が出てきたよ
370:デフォルトの名無しさん
08/05/20 15:30:59
>>365
def foo(x):
↑ここのxには確かにa = 1と同一の1が渡る。
x = 2
↑でもこれはその1を2に置き換えるのではなく
xの参照先を2に変更することになるのでaは1のまま。
371:デフォルトの名無しさん
08/05/20 15:31:48
>>365
Pythonで数字はイデア界にあるから
書き換え不能なんですよ。
372:デフォルトの名無しさん
08/05/20 15:33:56
>>369
嘘を嘘と見抜く練習をしような(w
373:デフォルトの名無しさん
08/05/20 15:49:35
つまり = は代入ではなく束縛ってことか
ところで
>>> lst = [0]
>>> lst[0] = lst
>>> lst
[[..]]
>>> def p(x): print x
>>> [p(x) for x in lst]
[[..]]
[None]
なんぞこれ
374:デフォルトの名無しさん
08/05/20 15:55:14
循環参照は[...]になるのか。賢いな。
375:デフォルトの名無しさん
08/05/20 18:42:18
>>370-371
えーと、本当に参照渡しの意味わかってんの?
fooの仮引数がxと宣言されているが、aを渡したときにそのxがaのエイリアスとして
機能する(つまりxがaと同等である)ようなものが参照渡しなんだが。
FORTRANはデフォで参照渡しだし、C++やC#は参照渡しもサポートする。
Pythonの場合、a, xは同一のオブジェクトを指している*別変数*だから、
xへの代入はaに影響を与えない。
そういうのは参照渡しとはいえないでしょ。
376:デフォルトの名無しさん
08/05/20 19:00:23
>>365
引数そのものはimmutable(不変)なので、関数内で書き換え不可。
この場合の引数とは、変数のアドレスのこと。
変数が指しているデータを書き換えたい場合は、例えば以下のように出来る。
def bar(x):x[0] = 2
a = [1,2,3]
bar(a)
print a # --> [2, 2, 3]
377:デフォルトの名無しさん
08/05/20 19:14:55
ミュータブルorイミュータブルというのはオブジェクトの特性であって
変数の特性ではない
378:デフォルトの名無しさん
08/05/20 20:15:06
そもそもPythonのオブジェクトには代入演算子ないし
379:デフォルトの名無しさん
08/05/20 20:36:17
Mr.NishioのJython本を読むと、変数はオブジェクトへのリファレンス貼る
ってことが書いてある。
買って読んでみなよ。
380:デフォルトの名無しさん
08/05/20 21:01:56
> 変数はオブジェクトへのリファレンス貼る
俺の頭が弱いのか? 何が言いたいのかわからん
381:デフォルトの名無しさん
08/05/20 21:05:15
C風に言えば、Pythonの変数はオブジェクトへのポインタ
代入はポインタのコピー
関数呼び出しは全部値渡し
Javaも値型(基本データ型)以外は一緒
382:デフォルトの名無しさん
08/05/20 21:12:01
>>360
> 関数の引数って参照渡しなの?
違います。
URLリンク(www.python.org)
> Remember that arguments are passed by assignment in Python. Since assignment just creates references to objects,
> there's no alias between an argument name in the caller and callee, and so no call-by-reference per se.
(引数は Python でいうところの代入によって渡されることを思い出して下さい。代入は単にオブジェクトへの参照を作るものなので、
呼び出す側の引数名と呼び出された側の引数名のあいだにはエイリアスはなく、「参照による呼び出し」も本質的に存在しません。)
383:デフォルトの名無しさん
08/05/20 21:44:09
渡す物がlistになると挙動が変わるはず
384:デフォルトの名無しさん
08/05/20 21:47:37
>>383
リストだろうが何だろうが、何も変わらない。
>>> def f(x): x = [1,2,3]
...
>>> a = []
>>> f(a)
>>> a
[]
>>>
385:デフォルトの名無しさん
08/05/20 21:58:26
>>> m = []
>>> def a(x): x.append(3)
>>> a(m)
>>> a(m)
>>> m
[3, 3]
これは何が起きているんだ?
俺の頭が弱いのか? 何が言いたいのかわからん
386:デフォルトの名無しさん
08/05/20 21:59:18
>>385
リストだろうが何だろうが、何も変わらない。
>>> def f(&x): x = [1,2,3]
...
>>> a = []
>>> f(a)
>>> a
[1,2,3]
>>>
387:デフォルトの名無しさん
08/05/20 22:04:59
Pythonを学ぼうと思うのですが
URLリンク(python.rdy.jp)
で何を選べばいいのかわかりません。
388:デフォルトの名無しさん
08/05/20 22:06:34
他言語経験は?
389:デフォルトの名無しさん
08/05/20 22:09:35
>>385
頭が弱いんじゃなくて、基本が理解できてない。
一体どんな教材でPython覚えたんだよ?
390:デフォルトの名無しさん
08/05/20 22:14:55
>>385
>>384の例は、代入によって「変数自体」を変更している
変数の変更とは、変数が持っていたオブジェクトへの参照を破棄し、
別のオブジェクトを指すようにする、ということだ
>>385の例は、破壊的メソッドによって、変数によって指されている
「オブジェクトの中身」を変更している。変数自体は何も書き換わっていない
391:デフォルトの名無しさん
08/05/20 22:25:40
>>388
初めてのC#を読みました。
作ったソフトウェアは2つほどでオブジェクト指向はある程度理解しているつもりです。
392:デフォルトの名無しさん
08/05/20 22:26:09
>>387
名著だ
URLリンク(www.amazon.co.jp)
393:デフォルトの名無しさん
08/05/20 22:26:37
>>392
ありがとうございます。
394:デフォルトの名無しさん
08/05/20 22:28:18
>>392
表紙でtypoが名著とはこれ如何に
395:デフォルトの名無しさん
08/05/20 22:31:19
ほんとだ噴いた
396:デフォルトの名無しさん
08/05/20 22:34:29
>>392
家宝にさせていただきます
397:デフォルトの名無しさん
08/05/20 22:45:04
>>391
プログラミング経験有りなら書籍ではないけれど
本家のチュートリアルの邦訳をまず読んでみれば
URLリンク(www.python.jp)
398:デフォルトの名無しさん
08/05/20 22:45:52
x = 23
はxのポインタの値が書き換わる。
x.append(3)
はポインタの先の値が書き換わる。
399:デフォルトの名無しさん
08/05/20 22:51:39
>>376と>>384の挙動の違いがよくわからない
400:デフォルトの名無しさん
08/05/20 22:54:11
>>399
>>376もポインタが指しているオブジェクトの中身を書き換えているだけだ
xとaは別の変数だが同じオブジェクト(リスト)を指しているから、
x経由で変更したオブジェクトをaから参照しても
同じように見えるのは当たり前だ
401:デフォルトの名無しさん
08/05/20 23:02:28
>>400
>>384の場合はx=[1,2,3]で新たにリストのオブジェクトを生成して、
変数xはそれを指すから、結果的に変数aの指すオブジェクトの中身は
書き換えられなかったってことでいいのかな?
402:デフォルトの名無しさん
08/05/20 23:04:21
>>401
うん
403:デフォルトの名無しさん
08/05/20 23:15:12
なるほど、スッとした。さんくす。
404:デフォルトの名無しさん
08/05/20 23:29:50
やっぱりスッとしない。
405:デフォルトの名無しさん
08/05/21 00:02:10
>>392
Amazonって、ランキングが出るじゃん。見たんだけどさ。
この時期でこのランキングはないわ。
名著なのに売れないなんておかしいな。
芸術作品ですか。
406:デフォルトの名無しさん
08/05/21 00:12:37
>>70のリンクの人から見ると名著なんだよ
407:デフォルトの名無しさん
08/05/21 00:20:13
>>70のリンクの人のせいで売れないんじゃね?
まるで逆宣伝だし。
408:デフォルトの名無しさん
08/05/21 00:27:14
そもそも対象となる層が少なすぎる感じがする
409:デフォルトの名無しさん
08/05/21 00:28:39
日本人限定だしね
410:デフォルトの名無しさん
08/05/21 00:39:27
そのうえ変な人に気に入られてるようじゃ相当マイナスだね。
411:デフォルトの名無しさん
08/05/21 01:00:29
Jython使うとPOIも使えると思うのですが
CPythonからPOIを使えるようにはできませんか?
412:デフォルトの名無しさん
08/05/21 01:08:00
Java使え
413:デフォルトの名無しさん
08/05/21 01:10:44
替わりにwin32comかpyExceleratorを使うとか
414:デフォルトの名無しさん
08/05/21 02:00:14
win32comもpyExceleratorは使ったことがあるのですが
どっちもいまいちなのでPOIを使いたいんですけど
Javaは使いたくないんです
415:デフォルトの名無しさん
08/05/21 02:30:37
GroovyとJRubyやるからどっかいけ
416:デフォルトの名無しさん
08/05/21 02:33:37
>414
ならばCPythonでJava classファイルを使えるようにする仕掛けをこさえるしかなかろ
それって結局JavaVMの特殊な独自実装になるような気もするが。
となると「Javaを使わない」という目的からは厳密には外れるな。
あるいはPure PythonでPOIを書き直すとか
417:デフォルトの名無しさん
08/05/21 02:50:31
そうですね
そうします
418:デフォルトの名無しさん
08/05/21 03:46:21
死ねばいいよ
419:デフォルトの名無しさん
08/05/21 04:20:22
死ねって・・・
Pythonの信者の人が反社会的っていうのはほんとなんですね
420:デフォルトの名無しさん
08/05/21 08:00:56
Jython本を読むと心が洗われます
421:デフォルトの名無しさん
08/05/21 09:01:36
>>406
これはむしろ愛と呼べる代物だ。
温泉ではアッー!な光景が繰り広げられるに違いない。
422:デフォルトの名無しさん
08/05/21 11:30:56
>>421
結論から言うと、今回のRuby Kaigiのテーマは"愛"。
:
Ruby愛以外に何か付け加えるものがあるとするならば、あとは、覚悟。
423:デフォルトの名無しさん
08/05/21 11:44:02
イケメンハッカーはJRubyの本を出せばよかったんじゃね?
424:デフォルトの名無しさん
08/05/21 13:12:48
Pythonソースコード完全解説とかなら普通に読みたいな
425:デフォルトの名無しさん
08/05/21 13:14:46
自分でコードも読めない奴は、技術者としては失格だと思うがな。
426:デフォルトの名無しさん
08/05/21 14:17:31
neet山
427:デフォルトの名無しさん
08/05/21 14:32:01
RubyConsortium
Rubycon
不良品乱発
428:デフォルトの名無しさん
08/05/22 03:50:04
会社で作るソフトに組み込むスクリプトとしてぜひ Python を押したいんだけど、
「(スクリプトの)逆アセンブルがすげー簡単ぽいけど、どうなのよ」みたいなこと言われたんだ。
そういうわけで、会社を納得させるべく、「思いつきでちょっと解析したぐらいでは分からない程度」
に Python スクリプトの難読化について考えてみたい。
429:デフォルトの名無しさん
08/05/22 04:01:50
(自分がパッと思いつく程度の)スクリプトの解析方法に付いて考えてみる。
A. python スクリプトファイルが丸見えの場合
.py ソースは問題外。
.pyc は dis モジュールに食わせてダンプして終了。しかもドキュメンテーション文字列付き。
.pyo も dis モジュールに食わせて終了。
B. スクリプトファイルが見えない場合
Python##.dll を改造してアプリケーション付属のDLLと差し替えて、
インポートしたモジュールのコードオブジェクトをダンプするなり別ファイルに書き出すなりする
C.コンパイル済みモジュールファイルが丸見えだが、dis に食わせても解析失敗する場合
カスタム Python を使用している事を疑う.
アプリケーション付属の Python##.dll を参照するようにして python.exe を実行し、
自作のスクリプトを pyc に変換させ、純正の pyc と比べてみる。
430:デフォルトの名無しさん
08/05/22 04:17:33
そう考えると、
•独自のインポータを sys.path_hooks に組み込んで自作アーカイブからスクリプトファイルを読み出すようにする
•独自アーカイブに含まれているスクリプトは、カスタム Python を使って読み書きするための特殊 pyc
•カスタムといっても、ようは pyc の読み書き部分だけつじつまを合わせれば良い
•従って、改造するのは marshal.c あたり?
431:デフォルトの名無しさん
08/05/22 05:37:37
>>428
「解析されて何か問題でも?」と答えておけ。
本当に解析されて困るプログラムなんて、この世にそれほど存在しないだろ。
432:デフォルトの名無しさん
08/05/22 11:39:00
GPL
433:デフォルトの名無しさん
08/05/22 11:49:46
JavaだってC#(IL)だって逆コンパイラは存在してるし
難読化とかもあるけど、最終的には>>431のような気がする
434:デフォルトの名無しさん
08/05/22 12:15:57
事情をよく知らない割には権限だけ持っていて、
変化を嫌いたがるダメ官吏みたいな上司を説得するのが一番大変なんだよね〜。
435:デフォルトの名無しさん
08/05/22 12:16:05
pyc や pyo はバイナリエディタで開いただけでも識別子名と関数名がまるわかりだからねえ
簡単な難読化ぐらいならやる価値あると思う
436:デフォルトの名無しさん
08/05/22 13:34:43
難読化とかwww馬鹿だろwww
死ねばいいのに
437:デフォルトの名無しさん
08/05/22 16:17:07
簡単な難読化をしてみせるだけで>428の仕事が楽になるならいいじゃないか。
それ自体に意味があるかどうかはどうでもいいのだ。
438:デフォルトの名無しさん
08/05/22 16:19:55
マってたまに、子供騙しで騙してしまえばいい相手の要求に対して、
妙に本気になって対処してしまうことがあるよね。自戒も含めてw
439:デフォルトの名無しさん
08/05/22 16:46:15
全て eval を使って文として
他のプログラムに仕込むとか
440:デフォルトの名無しさん
08/05/22 18:07:12
子供騙しで手を抜く奴はプログラマだ!
バレないように手を抜く奴は訓練されたプログラマだ!
こうですか? わかりません (>_<)
441:デフォルトの名無しさん
08/05/22 19:29:23
>>434
そういうときはその上司の上司を説得するべき
442:デフォルトの名無しさん
08/05/22 21:44:24
適当にxorして「暗号化しました!」
とか言っとけば大丈夫
443:デフォルトの名無しさん
08/05/22 22:47:10
ソースコード自身とxorしたから大丈夫です!
444:デフォルトの名無しさん
08/05/23 01:11:01
>>443
0x00とXORしないとダメだよ!!
445:デフォルトの名無しさん
08/05/23 02:15:01
ネタならネタで良いんですが
もう少し楽しめるのをおながいします
446:デフォルトの名無しさん
08/05/23 02:44:30
pygameで英語分からなくて暴れてる厨房だろ
放っとけよ
447:デフォルトの名無しさん
08/05/23 08:11:47
pygameの和訳さっさと進めろよハゲども
448:デフォルトの名無しさん
08/05/23 08:45:46
自己解決しました。
449:デフォルトの名無しさん
08/05/23 09:17:04
やめてください
450:デフォルトの名無しさん
08/05/23 10:14:11
イケメンハッカーが自決しました。
451:デフォルトの名無しさん
08/05/23 10:33:08
やめてください。
452:デフォルトの名無しさん
08/05/23 10:33:59
自己解決禁止
453:デフォルトの名無しさん
08/05/23 10:34:36
>>441
お花畑にお住まいの妖精さんですか?
現実は厳しいですよ。
454:デフォルトの名無しさん
08/05/23 10:35:08
neet山が自己休刊やめてください。
455:360
08/05/23 10:59:40
>>360
>>> def call(): info=[]; f(info); return info
...
>>> def f(x): x=[1,2,3] # list渡したい時は.append使え矢
...
>>> call()
[]
>>>
>>> def call(): info={}; f(info); return info
...
>>> def f(x): x[0]=1; x[1]=2; x[2]=3
...
>>> call()
{0: 1, 1: 2, 2: 3}
渡すものが、辞書かリストか、で字面的に違うということですね
事故解決しました。(&なんて使わねー)(*はリスト**は辞書ですが無くても動くのです無害です)
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5378日前に更新/131 KB
担当:undef