1 名前:デフォルトの名無しさん [2008/04/29(火) 23:47:08 ] Python オフィシャルサイト ttp://www.python.org/ ttp://www.python.org/doc/ 日本Pythonユーザ会 ttp://www.python.jp/Zope/ ttp://www.python.jp/doc/ FrontPage - Pythonのお勉強 ttp://python.rdy.jp/ 前スレ pc11.2ch.net/test/read.cgi/tech/1206876081/ ◆関連スレッド Microsoft IronPython 1.0 pc11.2ch.net/test/read.cgi/tech/1157686822/ Python の宿題ここで答えます Part 1 pc11.2ch.net/test/read.cgi/tech/1153585095/ Python Challengeをやろう! pc11.2ch.net/test/read.cgi/tech/1175919288/ Pythonについて(アンチ専用) pc11.2ch.net/test/read.cgi/tech/1203557046/ Pythonに見られるインデントによる制御構造の是非 pc11.2ch.net/test/read.cgi/tech/1169473442/ pythonがこの先生きのこるには pc11.2ch.net/test/read.cgi/tech/1167996371/ Eclipse統合M24【Java/C/PHP/Ruby/Python/Perl】(PyDev) pc11.2ch.net/test/read.cgi/tech/1200918324/ 【Perl,PHP】LLバトルロワイヤル2【Ruby,Python】 pc11.2ch.net/test/read.cgi/tech/1209289408/ デザパタ + Python/Ruby/Smalltalk part2 pc11.2ch.net/test/read.cgi/tech/1175959706/ 2ch検索: [python] find.2ch.net/?BBS=ALL&TYPE=TITLE&STR=python
413 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 01:10:44 ] 替わりにwin32comかpyExceleratorを使うとか
414 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 02:00:14 ] win32comもpyExceleratorは使ったことがあるのですが どっちもいまいちなのでPOIを使いたいんですけど Javaは使いたくないんです
415 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 02:30:37 ] GroovyとJRubyやるからどっかいけ
416 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 02:33:37 ] >414 ならばCPythonでJava classファイルを使えるようにする仕掛けをこさえるしかなかろ それって結局JavaVMの特殊な独自実装になるような気もするが。 となると「Javaを使わない」という目的からは厳密には外れるな。 あるいはPure PythonでPOIを書き直すとか
417 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 02:50:31 ] そうですね そうします
418 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 03:46:21 ] 死ねばいいよ
419 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 04:20:22 ] 死ねって・・・ Pythonの信者の人が反社会的っていうのはほんとなんですね
420 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 08:00:56 ] Jython本を読むと心が洗われます
421 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 09:01:36 ] >>406 これはむしろ愛と呼べる代物だ。 温泉ではアッー!な光景が繰り広げられるに違いない。
422 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 11:30:56 ] >>421 結論から言うと、今回のRuby Kaigiのテーマは"愛"。 : Ruby愛以外に何か付け加えるものがあるとするならば、あとは、覚悟。
423 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 11:44:02 ] イケメンハッカーはJRubyの本を出せばよかったんじゃね?
424 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 13:12:48 ] Pythonソースコード完全解説とかなら普通に読みたいな
425 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 13:14:46 ] 自分でコードも読めない奴は、技術者としては失格だと思うがな。
426 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 14:17:31 ] neet山
427 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 14:32:01 ] RubyConsortium Rubycon 不良品乱発
428 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 03:50:04 ] 会社で作るソフトに組み込むスクリプトとしてぜひ Python を押したいんだけど、 「(スクリプトの)逆アセンブルがすげー簡単ぽいけど、どうなのよ」みたいなこと言われたんだ。 そういうわけで、会社を納得させるべく、「思いつきでちょっと解析したぐらいでは分からない程度」 に Python スクリプトの難読化について考えてみたい。
429 名前:デフォルトの名無しさん mailto:sage [2008/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 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 04:17:33 ] そう考えると、 •独自のインポータを sys.path_hooks に組み込んで自作アーカイブからスクリプトファイルを読み出すようにする •独自アーカイブに含まれているスクリプトは、カスタム Python を使って読み書きするための特殊 pyc •カスタムといっても、ようは pyc の読み書き部分だけつじつまを合わせれば良い •従って、改造するのは marshal.c あたり?
431 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 05:37:37 ] >>428 「解析されて何か問題でも?」と答えておけ。 本当に解析されて困るプログラムなんて、この世にそれほど存在しないだろ。
432 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 11:39:00 ] GPL
433 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 11:49:46 ] JavaだってC#(IL)だって逆コンパイラは存在してるし 難読化とかもあるけど、最終的には>>431 のような気がする
434 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 12:15:57 ] 事情をよく知らない割には権限だけ持っていて、 変化を嫌いたがるダメ官吏みたいな上司を説得するのが一番大変なんだよね〜。
435 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 12:16:05 ] pyc や pyo はバイナリエディタで開いただけでも識別子名と関数名がまるわかりだからねえ 簡単な難読化ぐらいならやる価値あると思う
436 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 13:34:43 ] 難読化とかwww馬鹿だろwww 死ねばいいのに
437 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 16:17:07 ] 簡単な難読化をしてみせるだけで>428の仕事が楽になるならいいじゃないか。 それ自体に意味があるかどうかはどうでもいいのだ。
438 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 16:19:55 ] マってたまに、子供騙しで騙してしまえばいい相手の要求に対して、 妙に本気になって対処してしまうことがあるよね。自戒も含めてw
439 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 16:46:15 ] 全て eval を使って文として 他のプログラムに仕込むとか
440 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 18:07:12 ] 子供騙しで手を抜く奴はプログラマだ! バレないように手を抜く奴は訓練されたプログラマだ! こうですか? わかりません (>_<)
441 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 19:29:23 ] >>434 そういうときはその上司の上司を説得するべき
442 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 21:44:24 ] 適当にxorして「暗号化しました!」 とか言っとけば大丈夫
443 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 22:47:10 ] ソースコード自身とxorしたから大丈夫です!
444 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 01:11:01 ] >>443 0x00とXORしないとダメだよ!!
445 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 02:15:01 ] ネタならネタで良いんですが もう少し楽しめるのをおながいします
446 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 02:44:30 ] pygameで英語分からなくて暴れてる厨房だろ 放っとけよ
447 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 08:11:47 ] pygameの和訳さっさと進めろよハゲども
448 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 08:45:46 ] 自己解決しました。
449 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 09:17:04 ] やめてください
450 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 10:14:11 ] イケメンハッカーが自決しました。
451 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 10:33:08 ] やめてください。
452 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 10:33:59 ] 自己解決禁止
453 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 10:34:36 ] >>441 お花畑にお住まいの妖精さんですか? 現実は厳しいですよ。
454 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 10:35:08 ] neet山が自己休刊やめてください。
455 名前:360 mailto:sage [2008/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} 渡すものが、辞書かリストか、で字面的に違うということですね 事故解決しました。(&なんて使わねー)(*はリスト**は辞書ですが無くても動くのです無害です)
456 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 11:07:57 ] >455 ぜんぜん解決してない ... >>> def f(x): x=[1,2,3] に文法的に対応する辞書の記述は >>> def f(x): x = {0:1, 1:2, 2:3} だよ(これだと結果は callで代入された info → {} のまま)。 リストのappendが字面的に気に喰わないのなら、 x+=[1];x+=[2];x+=[3]; と書いてもいいかもね(ちょっとoverheadありそうな気もするけど)
457 名前:360 mailto:sage [2008/05/23(金) 11:30:33 ] >>456 d 1. def call(*各種設定リスト): info={}; f(info); return 2. 初期化関数もどき(空リスト、空辞書を破壊的操作で初期化) def f(x): x[0]=1; x[1]=1; x[2]=2 #辞書 def f(x): x+=[1]; x+=[2]; x+=[3] #リスト 設定ファイルちっくに扱うなら、辞書使うし余り気にならないのかも > リストの破壊的操作 JSonとか、いい感じなものだと最近わかり始めてきますた
458 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 12:07:53 ] 自己解決禁止しちゃいかんだろww
459 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 16:11:33 ] D:\TracLight\python>python Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import os >>> fn = os.path.join('./', 'test-file.txt') >>> open(fn).read() Traceback (most recent call last): File "<stdin>", line 1, in <module> IOError: [Errno 2] No such file or directory: './test-file.txt' 同じディレクトリ下にあるファイルを読むにはどう書けば良いですか?
460 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 16:19:24 ] >>> fn = os.path.join(os.getcwd(), 'test-file.txt') >>> fn = os.path.join('./', 'test-file.txt') >>> open(fn).read() .txt 拡張子が余計に付いてだけでした orz 事故レスすまそ
461 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:41:49 ] >>459 なんでバグだらけの旧バージョン使ってるんだ?
462 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:29:52 ] うるさいだまれ
463 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:36:57 ] 自己憤慨しました。
464 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 21:15:47 ] 自己発電しました。
465 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 22:41:04 ] 助けて java.security.AccessControlException: access denied (java.lang.RuntimePermission exitVM.0) at java.security.AccessControlContext.checkPermission(Unknown Source) at java.security.AccessController.checkPermission(Unknown Source) at java.lang.SecurityManager.checkPermission(Unknown Source) at java.lang.SecurityManager.checkExit(Unknown Source) at javax.swing.JFrame.setDefaultCloseOperation(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.python.core.PyReflectedFunction.__call__(Unknown Source) at org.python.core.PyMethod.__call__(Unknown Source) at org.python.core.PyObject.__call__(Unknown Source) at org.python.core.PyInstance.invoke(Unknown Source) at applet$_PyInner.init$1(applet.java:61) at applet$_PyInner.call_function(applet.java:47) at org.python.core.PyTableCode.call(Unknown Source) at org.python.core.PyTableCode.call(Unknown Source) at org.python.core.PyTableCode.call(Unknown Source) at org.python.core.PyFunction.__call__(Unknown Source) at org.python.core.PyMethod.__call__(Unknown Source) at org.python.core.PyObject.__call__(Unknown Source) at org.python.core.PyObject._jcallexc(Unknown Source) at org.python.core.PyObject._jcall(Unknown Source) at applet$MyApplet.init(applet.java:139) at sun.applet.AppletPanel.run(Unknown Source) at java.lang.Thread.run(Unknown Source)
466 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 22:43:40 ] pc11.2ch.net/test/read.cgi/tech/1207878910/385
467 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:13:26 ] マルチしちゃったか 死ね
468 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:38:32 ] ちょっと教えて欲しいんだけど、pythonの正規表現で先読みって使えないの? 下みたいに書いても全然文字列を分割してくれないんだけど line = '123,456,79' regexp = re.compile('(?=5)') print regexp.split(line)
469 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:56:48 ] >>468 www.python.jp/doc/nightly/lib/re-syntax.html > (?=...) > もし ...が次に続くものとマッチすればマッチしますが、文字列をまったく消費しません。 > これは先読みアサーション(lookahead assertion)と呼ばれます。 > 例えば、Isaac (?=Asimov) は、'Isaac 'に 'Asimov'が続く場合だけ、'Isaac 'とマッチします。 '(?=5)' だと空文字列に 5 が続くなら空文字列にマッチ(ただし 5 は消費しない)という意味になるのかな? 空文字列にマッチしたら分割の目的には使えないような・・・。 >>> a = re.compile(",(?=4)") >>> a.split("123,456,789") ['123', '456,789']
470 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:57:19 ] >>468 先読みが使えないっていうより re.split() に長さ 0 のパターンを渡しても何もしてくれないとかじゃない? 他の言語とかは挙動が違った気がする
471 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:57:58 ] >>468 ライブラリリファレンスを見れば分かるけど、先読みは使えるよ。 よくわからんが、split()がzero-width assertionでは機能しないのかもな。 split()に与えた正規表現にマッチした文字列をデリミタとみなして分割するから、 「位置」じゃなくて「文字(列)」にマッチする正規表現じゃないとダメ、とかさ。 ただの想像だけど。
472 名前:471 mailto:sage [2008/05/23(金) 23:58:39 ] ぐは。レスかぶりまくりじゃん。
473 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 00:15:30 ] 先読みの使い方を間違えてる
474 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 00:38:16 ] お前は次に「自己解決しました」と言う。
475 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 00:46:50 ] 自己解決しました
476 名前:468 mailto:sage [2008/05/24(土) 01:09:50 ] レスサンクス やっぱり場所指定の正規表現じゃ分割しないみたいだね perlとrubyでもsplit関数を動かしてみたんだけど、 perlはpythonと同様で場所指定の正規表現じゃ分割してくれなかったよ 一方rubyは意図したとおりに場所指定で分割できた 言語毎に結構挙動が違うもんなんだね
477 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 01:31:05 ] >>472 ぐは禁止。きもい。
478 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 01:32:10 ] ruby最強!
479 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 01:33:37 ] regexp = re.compile('.(?=5)')
480 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 01:50:44 ] >479 それだと一文字消えちゃうだろう常識で考えて
481 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 03:40:04 ] pyunoでOpenOfficeの制御したかったのだけど ubuntu7.10で動かないみたい udk.openoffice.org/python/python-bridge.html Hellow Worldのサンプル動かすと line 5, in <module> localContext = uno.getComponentContext() AttributeError: 'module' object has no attribute 'getComponentContext'
482 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 03:49:34 ] >>468 Perlのバージョンは? 試したらできたよ。 my @f = split /(?=5)/, $str; print join(':', @f), "\n";
483 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 05:24:45 ] >>> import re >>> line = '123,456,79' >>> regexp = re.compile('') >>> regexp.split(line) ['123,456,79'] そもそもこうなるんだもんなぁ
484 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 08:28:25 ] >>477 ぐはははははははははははhahahahahahahahaha!!!!!
485 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 10:14:48 ] ぐは。自己解決しました。
486 名前:デフォルトの名無しさん [2008/05/24(土) 12:39:52 ] >482 perlでもsplitできるね pythonで位置指定の分割ってどうやんだろ
487 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 13:03:35 ] こんな感じの関数を自分で作って使えばいいんじゃね def split(pattern, string): result = [] start = 0 for m in re.finditer(pattern, string): result.append(string[start:m.start()]) start = m.span()[1] result.append(string[start:]) return result
488 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 13:14:27 ] リスト返すようにしちゃったけど、ジェネレータにすべきだったか ま、その辺は好きに汁
489 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 14:06:35 ] >487 re.findall()
490 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 14:18:04 ] re.findall()がどうしたの?
491 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 15:33:29 ] Perl で split('', $str); に相当するのは Python ではどう書けばよいですか?
492 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 15:37:47 ] >>491 list(str)
493 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 19:16:39 ] オブジェクトのメソッドを一覧で取得するにはどうすればええの?
494 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 19:24:33 ] filter(callable, dir(hoge))
495 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 19:25:54 ] [x for x in dir(obj) if callable(getattr(obj, x))]
496 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 21:30:26 ] >>494 動きません。 自己確認してください。
497 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 22:48:52 ] 自己完結しました
498 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 22:51:21 ] >>494 オッサン臭いコードだな。その上動かないってどんだけ(www
499 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 22:58:55 ] itertools は使えそうで使えない
500 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:03:49 ] >>498 まさに労害(WWW
501 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:17:21 ] おれさまがなおしてやった filter(lambda x : callable(getattr(obj, x)), dir(obj))
502 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:28:11 ] ここまで来ると、わざわざfilterを使う意味なくね?
503 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:07:56 ] pythonのlambdaって読みづらいだけじゃね? pythonの基本的な文法と比べると汚い
504 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:14:14 ] Guidoもlambdaは嫌いだったと思う。 lambdaを使うのは変態か、自称イケメンハッカーのワンライナー芸人だけだろ。
505 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 01:19:41 ] どうせ残すなら いろいろできるようにすればいいのに
506 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 01:32:31 ] cshといっしょでコード互換のために残してるだけなんだから もう新規につかうようなもんじゃないだろ。
507 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 02:44:32 ] Pythonプログラミング入門はクソだとよ。
508 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 03:45:36 ] 自分の言葉で語りなさい
509 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 05:36:58 ] ということにしたいのですね
510 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 09:50:46 ] 懐かしいフレーズだ
511 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 10:51:46 ] 皆さん lambda と聞くと昔の傷がうずくのですね
512 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 10:52:28 ] Twisted本、クソ本フラグがたった感が。
513 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 11:37:37 ] うはは、わかりません。