Pythonのお勉強 Part3 ..
[2ch|▼Menu]
655:デフォルトの名無しさん
08/12/21 10:42:26
WindowsのPythonから透過的にCOMを呼び出す方法はいくつかあります。
IronPythonを使えば何の苦労もなく呼び出すことができますし、
Classic PythonからはPythonwinを使えば良いという事実はあまりにも有名です。
でも、以前紹介したように、Python 2.5にはctypesモジュールが最初から
用意されています。せっかく2.5使うんだから、ctypesでCOMを呼べないかと
思ってしまいますよね。残念ながら、ctypesは最近になって、COMを呼び出す機能を
comtypesに譲ったようで、追加でこれをインストールする必要があるようですが。

モノは試しなのでやってみます。やりたいことはこんな感じです。

var ssfNETHOOD = 19
var wshell = new ActiveXObject('WScript.Shell')
var shell = new ActiveXObject('Shell.Application')
var nethood = shell.nameSpace(ssfNETHOOD).self.path
//var nethood = wshell.specialFolders('NetHood')
var link = wshell.createShortcut(nethood + '\\TEST.lnk')
link.targetPath = 'fURLリンク(localhost)'
link.save()

このJScriptは、ネットワークコンピュータの下に「TEST」という名前で、
「fURLリンク(localhost)」を追加します。
comtypesでも同様にできるかと思ったら以外に落とし穴がありました。


656:デフォルトの名無しさん
08/12/21 10:42:57
comtypesをインストールして、以下のようにコードを書きました。

from ctypes import cast, POINTER
from comtypes.client import CreateObject
import os

wshell = CreateObject('WScript.Shell')
shell = CreateObject('Shell.Application')

from comtypes.gen.Shell32 import Folder2, ssfNETHOOD
from comtypes.gen.IWshRuntimeLibrary import IWshShortcut

nethood = cast(shell.NameSpace(ssfNETHOOD), POINTER(Folder2)).Self.Path
#nethood = wshell.SpecialFolders('NetHood')
link = cast(wshell.CreateShortcut('%s.lnk' % os.path.join(nethood, 'TEST')),
POINTER(IWshShortcut))
link.TargetPath = 'fURLリンク(localhost)'
link.Save()

5, 6行目でCOMオブジェクトを作るとcomtypes.genパッケージの下にそれらしい名前で
.pyと.pycが作られるので、これらを8, 9行目でインポートしています。

注意しないといけないのは、11, 13行目でやっているように、オブジェクトを
適宜明示的にダウンキャストしてやる必要があるということです。
このあたりの詳しい説明は、ここにありました。
URLリンク(aspn.activestate.com)
Pythonwinではこのようなキャストは必要ないので少々面倒な気がしますが、
選択肢が多くあるのは良いことです。


657:デフォルトの名無しさん
08/12/21 12:04:17
>>643
そのモジュールって標準?


658:161
08/12/21 12:13:01
お久しぶりです。
年末の直前あたりに、僕が作成した
フレームワークの完成形を披露したいと思います。
よろしくお願いします。

659:デフォルトの名無しさん
08/12/21 12:14:00
>>657
web.py だろう

660:デフォルトの名無しさん
08/12/21 12:26:41
URLリンク(webpy.org)

661:デフォルトの名無しさん
08/12/21 12:31:31
URLリンク(d.hatena.ne.jp)
URLリンク(d.hatena.ne.jp)

662:デフォルトの名無しさん
08/12/21 12:34:33
URLリンク(mdp.cti.depaul.edu)

663:デフォルトの名無しさん
08/12/21 12:48:24
Pythonistaも質が下がったな

664:デフォルトの名無しさん
08/12/21 12:59:42
スレリンク(tech板:161番)

665:デフォルトの名無しさん
08/12/21 17:03:55
ネットにあるようなフリーソフトはCなどで書かれてると思いますが、pythonでもできますか?
pythonで自分の設計したプログラムを作成することは可能でしょうか?
(設計する技術があるかは・・・ですが)学習すれば、プログラムを作ったり
できるといいのですが。。。

666:デフォルトの名無しさん
08/12/21 17:26:32
出来るっちゃ出来るけど
サンプル少ないからな

初心者のうちはC/C++, .NETのほうが苦労は少ないと思うよ

667:デフォルトの名無しさん
08/12/21 17:30:52
>>665
はっ? .exe作るってこと? できるよ。

>>666
はっ? 初心者?

668:デフォルトの名無しさん
08/12/21 17:32:09
>>665
できる。
ゆくゆくは配布したいと考えるなら、Cで作ったプログラムみたいにはいかないかもしれないけど、
そういうのは実際にプログラムを組んでから考慮すればよろし。

669:デフォルトの名無しさん
08/12/21 17:32:59
>>665
出来る
でも生産的ではないし、動作も遅い

670:デフォルトの名無しさん
08/12/21 17:39:14
むしろ生産的だと思うが
Cはバイナリ配布ならともかくソース晒すこと考えるとライブラリやらコンパイラやらプラットフォームやら依存性の解決がめんどくさすぎる
実行環境がそのままデバッグ環境になるのはかなり大きいと思うし

671:デフォルトの名無しさん
08/12/21 17:47:18
Cはバイナリにしてしまえばランタイムも必要とせず動くのが良いな(例外あり)。
Pythonは第三者の作ったライブラリを用いたアプリを配布する場合、
一緒くたにするならライセンスに気を配らなくちゃいけないし、
「別途ライブラリをインスコしてくれ」と、自分の書いたプログラムだけを配布する形だと、
導入する敷居が高くなって万人に使ってもらえなくなる。

672:デフォルトの名無しさん
08/12/21 17:51:26
>>670
質問から言って、念頭においてるのはLinux系のオープンソースではなくて
Windowsの「フリーソフト」なんだろうから
別にM4マクロを駆使してautoconfだのautomakeだのを記述したり
山ほど#ifdefを記述したりといったことを考えなくてもいいんじゃないの

WindowsのGUIアプリを簡単にデッチ上げられるかどうかのほうが重要

673:デフォルトの名無しさん
08/12/21 17:55:24
全部まとめて exe にパックすればいいやん

674:デフォルトの名無しさん
08/12/21 17:59:47
可能不可能からいったら出来る
楽かどうかの話だろ

WindowsのAPIはC/C++の形で提供されているので、Windowsの機能にアクセスするには
出来合いのラッパーライブラリ(巨大か、一部分しかサポートしていない)を
使うか、ctypesを使うか(C/C++のようにヘッダの#includeはできないので、
自分でシステムの型や定数を定義する必要がある)か、
自分でC/C++拡張を書くかという話になる

675:デフォルトの名無しさん
08/12/21 18:26:52
Pythonistaも質が下がったな

676:デフォルトの名無しさん
08/12/21 18:36:48
ActivePythonの3.0版来てるじゃん

677:デフォルトの名無しさん
08/12/21 19:16:37
Active*って何なのか良くわからんので説明plz


678:デフォルトの名無しさん
08/12/21 19:24:47
ActivePython → 抱き合わせ商法

679:デフォルトの名無しさん
08/12/21 19:41:43
PyWin32が付いてくるのでWin32APIをラクに呼べたりCOMサーバをいじくったりできる。
昔はHTMLからPythonを呼べたけど、今はどうか知らない。

680:デフォルトの名無しさん
08/12/21 20:53:48
I love Python.

681:デフォルトの名無しさん
08/12/21 20:59:08
So do I.

682:デフォルトの名無しさん
08/12/21 21:40:51
>>665
> ネットにあるようなフリーソフトはCなどで書かれてると思いますが

思うな。
そこから始めろ。

683:デフォルトの名無しさん
08/12/21 22:52:46
ここまで続いてやり方言うヤシは誰もおらんのか
exe化はPy2Exeが有名
Python製作って内骨格とか普通にあるじゃん


684:デフォルトの名無しさん
08/12/21 22:56:35
URLリンク(www.python.jp) を見て書いた

import urllib
f = urllib.urlopen("URLリンク(www.google.co.jp)")
print(f.read())

これだけのコードが動きません

AttributeError: 'module' object has no attribute 'urlopen'

import の時点で失敗しているようです。なぜでしょうか? どのようにすれば解決できるでしょうか?

685:デフォルトの名無しさん
08/12/21 23:07:43
>>684
urllib.pyってファイル名にしているから、
あるいはそういうファイルが他にあるから。

686:デフォルトの名無しさん
08/12/21 23:09:48
まずは、
import urllib
print urllib.__file__

687:687
08/12/21 23:22:20
>>685
心当たりはないです

>>686
以下のエラーになります:
File "test.py", line 2
 print urllib.__file__
SyntaxError: invalid syntax


688:687 (=684)
08/12/21 23:23:58
>>686
print(urllib.__file__)
としたら
C:\python30\lib\urllib\__init__.py
が出力されました

689:デフォルトの名無しさん
08/12/21 23:30:32
>>688
# Python 3.0
import urllib.request
f = urllib.request.urlopen("URLリンク(www.google.co.jp)")
print(f.read())

690:デフォルトの名無しさん
08/12/22 00:34:09
>>684のドキュメントは2.5用

691:デフォルトの名無しさん
08/12/22 01:48:50
Are you happy?

692:687 (=684)
08/12/22 08:11:05
なるほど、バージョンによってライブラリの構造が変わっていたのですね。
>>689 で成功しました。ありがとうございます。

693:687 (=684)
08/12/22 17:29:02
レンタルサーバのPythonがVer2.5.1でした><
複数のVerのPythonを共存させることはできますか? (普通にインストールすればおk?

694:デフォルトの名無しさん
08/12/22 17:44:49
>>693
自分のPCに入れたいという話か?
俺は複数のバージョンを入れているよ

ただし、ActivePythonをインスコするとレジストリエントリが作られ、
サードのライブラリをインストーラパッケージで入れたりするときに
それが参照される
つまり、レジストリに設定されているPythonが正と見なされることになる

全部自分でsetup.pyでビルド&インストールでするんなら何も問題ないけどな

695:デフォルトの名無しさん
08/12/22 18:19:07
レンタルサーバのPythonがVer2.5.1でした><
レンタルサーバのPythonがVer2.5.1でした><
レンタルサーバのPythonがVer2.5.1でした><


696:デフォルトの名無しさん
08/12/22 18:20:19
犬臭い

697:デフォルトの名無しさん
08/12/22 18:43:13
俺も複数のバージョンを入れているよ
全部自分でsetup.pyでビルド&インストールでするんなら
何も問題ないとまでは言えないけど比較的安全
yumが動かなくなったのでアカウント事にpath変えてる


698:デフォルトの名無しさん
08/12/22 19:33:27
この際だから聞くけど、ビルドって拡張モジュールのコンパイルのことを指すの?

699:665
08/12/22 21:58:05
自分の質問にたくさん返答いただきましてありがとうございます。
色々と考え方はあると思いますが、exeが作成可能ということですね。
勉強してみます。本当にありがとうございました。

700:687 (=684)
08/12/22 22:06:19
setup.py が何を指すのかすらわからない駆け出しだったりしますが、とりあえずインストールしてみました。
何か問題が起きそうになったらまた質問させていただきますね。

701:デフォルトの名無しさん
08/12/23 01:15:24
>>693
悪いことは言わないから、 2.y 系を使いな。
まだ 3.y 系は一般人向けじゃない。

702:デフォルトの名無しさん
08/12/23 02:25:23
2.6.xを使いたいということかもしれん

703:デフォルトの名無しさん
08/12/23 02:51:51
globalsってなに?
global"s"って何よ
typoってこいつのせいで2日潰した

704:デフォルトの名無しさん
08/12/23 03:30:22
grobalと被っちゃまずいだろ

705:デフォルトの名無しさん
08/12/23 12:37:57
Python 2.5.3 and 2.4.6 released

706:デフォルトの名無しさん
08/12/23 15:56:12
Python3系の本が何冊か準備中みたいですね。


707:デフォルトの名無しさん
08/12/23 17:13:57
和書は糞だから放置。

708:デフォルトの名無しさん
08/12/23 18:07:54
pythonでコードを書きたいがために余計な仕事を増やしている人はいますか?
もしいれば、具体的なモデルを教えてください

709:デフォルトの名無しさん
08/12/23 19:22:06
>>707
洋書ですよ


710:デフォルトの名無しさん
08/12/23 19:25:57
>>707
普段から洋書読んでれば洋書の話だってわかるだろうに。

711:デフォルトの名無しさん
08/12/23 19:58:03
707は和書の著者


712:デフォルトの名無しさん
08/12/23 21:01:57
和っ書ぃ

713:デフォルトの名無しさん
08/12/23 21:06:20
洋ぃ書っと

714:デフォルトの名無しさん
08/12/23 22:37:07
Pythonってずっと ピジョンって読むのかと思ってたけど
パイソンだったのね

715:デフォルトの名無しさん
08/12/23 22:44:55
707は売れない和書の著者。

716:デフォルトの名無しさん
08/12/23 22:46:30
レッテル貼つまらんぞ偏屈者共

717:デフォルトの名無しさん
08/12/23 22:52:35
別にこの太陽系第三惑星のお前以外のホモ・サピエンスは
お前を楽しませる為に生命活動を行ってるわけじゃないし。

718:デフォルトの名無しさん
08/12/23 23:02:45
rubyやれよ糞ども

719:デフォルトの名無しさん
08/12/23 23:04:17
またruby厨の荒らしですか?

720:デフォルトの名無しさん
08/12/23 23:10:34
python 3000 の本というからには
3000円ポッキリで出そうぜ

721:デフォルトの名無しさん
08/12/23 23:15:14
python始めてみようかと思う
どのバージョンがお勧めなんだい?
2.6.x?


722:デフォルトの名無しさん
08/12/23 23:25:26
716は売れないクソ和書の著者。

723:デフォルトの名無しさん
08/12/23 23:32:48
>>721
2.6.xやって、3.xを予習くらいでいいんじゃない

724:デフォルトの名無しさん
08/12/23 23:36:19
2.6に対応しているフレームワークって多いの?

725:デフォルトの名無しさん
08/12/23 23:40:47
とりあえず色々試したいってのなら2.5の方がいい気がする
新し物好きなら迷わず3選べ!(ネットやら本のコードが2系統だからちょっと手間だが)

726:161
08/12/23 23:41:10
呼びました?

727:デフォルトの名無しさん
08/12/23 23:41:27
>>723
ありがとん

あと、オススメの本てあるだろうか?
和書はあんまいいのないのかな?
洋書でもいいんだけど、和書の方がぱっと見でキーワードとか目に止まるからさ
翻訳本は嫌だけど。

728:デフォルトの名無しさん
08/12/23 23:43:16
2.6.xを進める723はHello Python止まりの引きこもり。

729:デフォルトの名無しさん
08/12/24 00:23:40
>>727
python.orgの翻訳ドキュメントがお勧め。python.jpにある。
ただのドキュメントがいいから、普及している割に本が少ない。

730:デフォルトの名無しさん
08/12/24 00:36:34
>>729
そうなのか。公式のドキュメントがいいってのはいいね

バージョンは結局自分で触ってみないと善し悪しがわかりそうにないな
てきとーにいじってみてから考えるとしますわ

731:デフォルトの名無しさん
08/12/24 01:10:48
>>730
jp独自ドキュメントじゃなくて、本家ドキュメント読んでねw
2.5は翻訳完了してるから。

732:デフォルトの名無しさん
08/12/24 01:11:52
いま>>731がしれっとひどいこと言った

733:デフォルトの名無しさん
08/12/24 01:12:12
URL挙げとくか。PDFもあります。
URLリンク(www.python.jp)

734:デフォルトの名無しさん
08/12/24 01:12:27
胸が小さい

735:デフォルトの名無しさん
08/12/24 01:14:01
Pythonでローパケットいじりたい場合
Twistedしかない?

736:デフォルトの名無しさん
08/12/24 01:21:54
>>735
raw socketをそのまんま使う

737:デフォルトの名無しさん
08/12/24 01:29:14
>>736
そこらへんのことを学ぶたべの書籍ってないでしょうか?

738:デフォルトの名無しさん
08/12/24 01:42:44
UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTI
URLリンク(www.amazon.co.jp)
WinSock2プログラミング−Windows Sockets APIによるネットワークプログラミングのすべて
URLリンク(www.amazon.co.jp)

C言語だけど、この辺知らないでプログラム書くのは無謀。

詳解TCP/IP〈Vol.1〉プロトコル
URLリンク(www.amazon.co.jp)

739:デフォルトの名無しさん
08/12/24 02:41:25
Python 2.5.4 released.

2.5.3 短命杉w

740:デフォルトの名無しさん
08/12/24 03:07:03
739 :デフォルトの名無しさん [↓] :2008/12/24(水) 02:41:25
Python 2.5.4 released.

2.5.3 短命杉w

741:デフォルトの名無しさん
08/12/24 03:59:11
740 名前:デフォルトの名無しさん[sage] 投稿日:2008/12/24(水) 03:07:03
739 :デフォルトの名無しさん [↓] :2008/12/24(水) 02:41:25
Python 2.5.4 released.

2.5.3 短命杉w

742:デフォルトの名無しさん
08/12/24 04:42:19
クラスへのメンバの追加を制御するために__slots__を使っているんですが、

class foo(object):
  __slots__ = ['hoge', 'fuga']

  def __init__(self):
    self.hoge = 1
    self.fuga = 2

ここに新たに'piyo'というメンバを追加したくなったときに、__slots__と__init__の2箇所を書き直さなければならないのは少し面倒な気もします。
もっと簡単に書けませんかね?
そもそもこういうことをpythonに求めてはいけないとか?

743:デフォルトの名無しさん
08/12/24 06:23:03
しかしpythonもデカい言語になったもんだなー。
Library reference読んで再認識したよ。


744:デフォルトの名無しさん
08/12/24 10:07:22
>>742
>そもそもこういうことをpythonに求めてはいけないとか?

メタクラスでも使って自己解決しろ。

745:デフォルトの名無しさん
08/12/24 11:04:00
この記事、ひどくね?

URLリンク(gihyo.jp)
>一般的に,並行処理を行うにはスレッドを用いますが,Pythonは
>GIL(Global Interpreter Lock)という1プロセスごとにロックを持
>つ機構を採用しているため同時に1つしかスレッドを実行できません。

746:デフォルトの名無しさん
08/12/24 11:17:14
Ruby厨のデマだよ。
よい子は惑わされちゃダメだよ。

747:デフォルトの名無しさん
08/12/24 11:19:33
論理的にマルチスレッドで書くという話と
SMP で並列処理してパフォーマンスを書くという話の
マルチスレッドとを用語上きちんと分けろってこと?

一般用語はどうなってるの?

748:デフォルトの名無しさん
08/12/24 11:29:21
何をひどいと言ってるのかは分からんな

PythonにはGILがあるからマルチスレッドでは並列計算が出来なかった
(I/Oとかは外出し出来たけど)
→multiprocessingならそんな問題が無くてウマー

という提灯記事じゃないのか?

749:デフォルトの名無しさん
08/12/24 11:32:51
I/Oに限らず、時間のかかる拡張モジュールは全部GIL外で動かすことで
Pythonと並列に実行できるけどな。

750:デフォルトの名無しさん
08/12/24 11:34:23
まあCのコードを書いて、かつPythonインタプリタやPythonのオブジェクトに
触らないんなら
そら何でもありだわな

751:デフォルトの名無しさん
08/12/24 11:44:51
何でもありが一番だよ。

752:デフォルトの名無しさん
08/12/24 15:05:56
Alex MartelliのPythonクィックリファレンスってもうそろそろ出るのかな?
クックブックは、今から買ってこようと思うんだけど

初めてのPythonとクックブックがあれば、
本家サイトの英語版でお茶を濁せるもんですか?

正規表現関連とメール関連がやりたいです

753:デフォルトの名無しさん
08/12/24 16:06:43
Dやろうっと。

754:デフォルトの名無しさん
08/12/24 16:23:31
Cook Bookも原書で読んだ方がいいよ。
翻訳本はどれもクソだよ。

755:デフォルトの名無しさん
08/12/24 16:35:10
買ってきたお
3月前に出版されたbashのクックブックも買ってきてしまった

Pythonクィックリファレンスもチェックしてきたけど
プリントアウトを代行しましたみたいな本だね
もっと詳しいことが載っているのかと思っていた

くわしく使い方を知りたかったら、ソースを読めって話なのか
>>754
英語を楽しんでいる時間は、ないんよ
3.xに完全移行したら、そのときは原書を読もうかな

756:デフォルトの名無しさん
08/12/24 16:55:31
クイックリファレンスの次がソースw

757:デフォルトの名無しさん
08/12/24 17:01:20
>>755
>プリントアウトを代行しましたみたいな本

おまえそれは翻訳者に失礼だわ。
離婚書けてまで翻訳したらしいぞ(ww

758:デフォルトの名無しさん
08/12/24 17:40:18
pythonで計算時間の計測ってどうするの?

759:デフォルトの名無しさん
08/12/24 17:45:17
URLリンク(www.python.jp)

760:デフォルトの名無しさん
08/12/24 23:52:33
>>738
そこら辺は知ってるけど
Pythonで簡単にやる方法を探してる

761:デフォルトの名無しさん
08/12/25 00:03:28
raw socketで簡単じゃんw

762:デフォルトの名無しさん
08/12/25 00:06:28
>そこら辺は知ってるけど
知ってるのなら>>759より簡単な計測方法って
具体的にどんなものをイメージしているのか教えてくれ。

timeとか?w

763:デフォルトの名無しさん
08/12/25 00:07:28
>>761
Cでならできるけど
Pythonでのサンプルを見たい

764:デフォルトの名無しさん
08/12/25 00:08:17
Cでできるなら
Pythonでのサンプルなんていらないだろ

765:デフォルトの名無しさん
08/12/25 00:08:53
>>762
多分勘違い
計測方法を聞いてるのは俺じゃない
俺は生パケットのPythonでの扱いを聞いた方

766:デフォルトの名無しさん
08/12/25 00:09:36
>>764
スクリプト言語でやることが必須

767:デフォルトの名無しさん
08/12/25 00:09:55
>>765
正直心の底からすまんかった

768:デフォルトの名無しさん
08/12/25 00:13:33
python 2.5.4は2.5.2に比べてかなり速くなってる。
BeutifulSoupにxmlをパースさせる処理が約11秒から約9.5秒になった。

769:デフォルトの名無しさん
08/12/25 00:17:41
2.5.3寿命短すぎだろw
落とすだけ落としたけどインスコしないで正解だったわ

770:デフォルトの名無しさん
08/12/25 00:18:14
>>765
まずこれ。URLリンク(www.python.jp)

あとは httplib.py とか SocketServer.py とかそのあたりの標準ライブラリの
コードを読むのがオヌヌメ。


771:デフォルトの名無しさん
08/12/25 00:22:45
>>758
チュートリアルぐらい読め

772:デフォルトの名無しさん
08/12/25 00:23:50
んなTCPとかいう高級なレイヤーの上の話じゃなくて、
raw socketの話をしてんじゃないのか?

なんか全然勘違いしてると思うぞ質問者の意図を

773:デフォルトの名無しさん
08/12/25 00:30:04
>>772
TCPより下の部分はOSの領分だから、普通は raw socket といえばTCP/UDB/Unix Domain
なんだよ。
ていうか、IP層には socket の概念ないし。 raw packet なら IP Packet か Ether Packet かも
しんないけどさ。

774:デフォルトの名無しさん
08/12/25 00:37:27
>>773
いやフツーraw socketつったらSOCK_RAWのことだと俺は思っていたが……
まあraw socketって言葉遣いが悪かったんならそれは謝る、質問者は
>>735でraw packetと言っていたからね

775:デフォルトの名無しさん
08/12/25 00:53:45
>>770
ありがとう
ただ、そこのサイトの例はちょっと上位レベルな感じだな
TCPヘッダのSEQナンバー、ACKナンバーとか制御フラグとか
いじるのが一番の目的なので

SocketServer.pyとかはそんな感じなのかな?

776:デフォルトの名無しさん
08/12/25 01:08:10
>>775
> SocketServer.pyとかはそんな感じなのかな?

いや全然そんなことは無いので安心汁


777:773
08/12/25 01:24:36
>>774
いや、生パケットとか生ソケットって言葉から、 SOCK_RAW 連想できんかった。すまん。

一般用語としては、「生」っていう用語はあるレイヤに着目したひとつ下のレイヤの事で、
IPの下にはEther当のネットワーク層があるから、生パケットって言われても
TCP Packet, UDP Packet, IP Packet, Ether Packet のどれか判らんかった。

778:デフォルトの名無しさん
08/12/25 01:28:34
>>777
いや、TCPの上に乗っかるアプリケーションにはTCPを流れるデータは
バイトストリームにみえるわけで、
「パケット」は意識しないし、できないでしょ
「パケット」と言われて>>770の例を出すのは発想として明らかにおかしいと思うよ

まあ結論はもう出てるからどうでもいいけどね

779:デフォルトの名無しさん
08/12/25 08:45:14
ARPは扱えますか?

780:デフォルトの名無しさん
08/12/25 09:19:03
何をしたいの?
サーバはカーネル組み込みのOSが多いから置き換え不能だけど。

781:デフォルトの名無しさん
08/12/25 10:06:12
は?

782:デフォルトの名無しさん
08/12/25 18:19:11
python で ARP のパケットを送受信できますか
何か OS 依存のライブラリとか使わないとできませんか?


783:デフォルトの名無しさん
08/12/25 18:40:58
>>782
できる。
URLリンク(mail.python.org)
URLリンク(sourceforge.net)


784:デフォルトの名無しさん
08/12/25 19:45:38
>>783
ありがとうございます!!

785:デフォルトの名無しさん
08/12/26 03:45:54
pythonが関数型言語というわりに
あんまり関数ぽくない感じするのは気のせいなのか
副作用つかいまくってる


786:デフォルトの名無しさん
08/12/26 03:54:29
だれが関数型だなんていったんだ

787:デフォルトの名無しさん
08/12/26 04:02:16
>>785
> pythonが関数型言語というわりに

そんなこと誰が言ってるんだw
関数型言語から色々便利な道具は拝借してるが、単にそれだけだ。

式と文を区別してるし、参照透明性なんぞ最初から眼中にないし、
lambdaは中途半端な糞だし、関数型的なリストは持たないし、
カリー化もパターンマッチも代数データ型もないし、
末尾再帰は最適化しないし、畳み込みは3.0からは格下げだ。

ある意味Guidoの好みは時代に逆行してるな。関数型を嫌ってるんだから。

788:デフォルトの名無しさん
08/12/26 06:12:36
でも Python は使いやすい

789:デフォルトの名無しさん
08/12/26 06:54:27
関数型はネストが深くなりやすいとかメリットを享受するためには無名関数を使わざるを得ないとかの印象がある
Guidoの考えとは相性良くないんだろう
書きにくくはないけど読みやすくはない

790:デフォルトの名無しさん
08/12/26 14:27:48
ctypes で WindowsAPI EnumWindows を呼びたいのですが
EnumWindows は引数に callback 関数を指定しないといけないので
python 側の関数を callback してもらいたいと思います
具体的な書き方が分からないのでどなたか教えてください

791:デフォルトの名無しさん
08/12/26 15:09:33
URLリンク(www.python.jp)

from ctypes import *
from ctypes.wintypes import *

EnumWindows = windll.user32.EnumWindows
EnumWindows.argtypes = [c_void_p, c_int]
EnumWindows.restypes = c_int
EnumWindowsCallback = CFUNCTYPE(c_int, c_int, c_int)

GetWindowText = windll.user32.GetWindowTextA
GetWindowText.argtypes = [c_int, c_char_p, c_int]
GetWindowText.restypes = c_int

def pyEnumWindowsCallback(hwnd, lp):
buf = create_string_buffer('\000' * 1024)
GetWindowText(hwnd, buf, 1024)
if len(buf) > 0:
if buf.value != '':
print buf.value
return True

EnumWindows(EnumWindowsCallback(pyEnumWindowsCallback), 0)


792:デフォルトの名無しさん
08/12/26 15:16:26
py2exeでdllは作れないの?

793:デフォルトの名無しさん
08/12/26 15:18:51
>>787
まー関数型が好きな人は「パターンマッチとカリー化使ってプログラムできる俺かっけえw」
とかニヤニヤしてればいいんじゃね。
高度に関数型の言語は、手続き型と比べてアルゴリズムの記述とかパフォーマンスチューニ
ングのノウハウの蓄積と普及がまだまだという印象を受ける。みんながもっと関数型を使う
ようになればそういう動きが活発になるんだろうけど。
それと、SmallTalkとかHaskellみたいに一つのプログラミングパラダイムのみをサポートす
る言語は、特定の用途にはとても強いが、逆に苦手なプログラミングのタイプにはさっぱり、
ってのが多い気がしないか。
その点、いろんなとこから良いとこ取りしてるPythonは柔軟な対応ができて良いと思うのだけれど。

794:デフォルトの名無しさん
08/12/26 15:19:05
>>790
先を越されてしまったようだが……
コールバックとしては、↓のようにクラスのメソッドも普通に使えるよ。

import ctypes

BOOL = ctypes.c_int
HWND = ctypes.c_ulong
LPARAM = ctypes.c_ulong
EnumWindowsProc = ctypes.WINFUNCTYPE(BOOL, HWND, LPARAM)
user32 = ctypes.windll.user32

class Foo(object):
    def __init__(self):
        self.windows = []

    def MyEnumWindowsProc(self, hwnd, lparam):
        self.windows.append(hwnd)
        return 1

    def __call__(self):
        user32.EnumWindows(EnumWindowsProc(self.MyEnumWindowsProc), 0)
        return self.windows

for hwnd in Foo()(): print "%08X" % hwnd


795:デフォルトの名無しさん
08/12/26 15:33:10
>>793
Pythonは関数型言語じゃありませんよということを説明しただけだよ
Pythonに関数型言語になって欲しいとは一言も言ってない

マルチパラダイム言語の中で考えれば、Scalaあたりに比べれば
言語の記述力自体は別に平凡な部類でしょ、Pythonは

796:デフォルトの名無しさん
08/12/26 15:45:25
On Python
URLリンク(www.shido.info)
ython と Ruby は実はほとんど同じで、むきになるほどの差はないと思います。 (ただ、Python は Haskell などの最近の関数型言語の影響が強く見られ、 一方、Ruby は Smalltalk や Eiffel などのオブジェクト指向言語と Lisp の影響が見られます。)


797:デフォルトの名無しさん
08/12/26 15:49:34
>>796
URLリンク(d.hatena.ne.jp)
で叩かれてたサイトだな

798:デフォルトの名無しさん
08/12/26 15:54:24
>>797
せっかく有用な比較してるのに妙な叩きするなよ

zopeとダンジョの比較情報探すのもかなり苦労したんだから

799:デフォルトの名無しさん
08/12/26 15:59:59
有用な比較って……

Pythonでシークエンス型は参照渡しで他は値渡しって記述は俺も
ひどいと思ったけど
大嘘じゃん

800:デフォルトの名無しさん
08/12/26 16:05:05
そもそもPythonレベルで参照渡しなんて概念を持ち出す必要があるのか疑問

801:デフォルトの名無しさん
08/12/26 17:18:57
>>800
お前相当アホだろ?

802:デフォルトの名無しさん
08/12/26 17:22:40
すみませんが、質問です。
ジェネレータを通常のリストに変換する簡潔な方法は無いでしょうか?
ジェネレータが逐次返してくる値を全部まとめたリストを得たいのです。

803:デフォルトの名無しさん
08/12/26 17:40:37
>>802
[ e for e in G ]

804:デフォルトの名無しさん
08/12/26 17:40:42
list

805:デフォルトの名無しさん
08/12/26 17:54:45
>>804
おお、こんなクラスが。ありがとうございました。
> Help on class list in module __builtin__:
>
> class list(object)
> | list() -> new list
> | list(sequence) -> new list initialized from sequence's items

>>803
リスト内包表記もかなり簡潔ですね。


806:デフォルトの名無しさん
08/12/26 17:56:49
>>791
早速ありがとうございます!!
でも実行すると最後にエラー出てました
EnumWindowsCallback = CFUNCTYPE(c_int, c_int, c_int)

EnumWindowsCallback = WINFUNCTYPE(c_int, c_int, c_int)
でエラー出なくなりました

>>794
きれいなコードですね
ありがとうございました!!


807:デフォルトの名無しさん
08/12/26 18:21:56
>>796
駄本の著者だな

808:デフォルトの名無しさん
08/12/26 18:54:21
景品表示法的にグレーな本書いた人ね

809:デフォルトの名無しさん
08/12/26 19:05:47
URLリンク(www.amazon.co.jp)

続編は内容的にガッカリらしい

810:デフォルトの名無しさん
08/12/26 21:15:32
恥ぱい

811:デフォルトの名無しさん
08/12/26 21:27:53
中身がハッカーズ大辞典やアンサイクロペディアみたいなノリだったら
あのタイトルでも許せたんだけどな。


812:デフォルトの名無しさん
08/12/27 05:52:00
イテレータから、n 個ずつとってまとめたタプルを
次々返すようなジェネレータって標準モジュール内にないですかね?
itertools 内を見回しても見当たらないんですけど・・・
結構使う機能なので、使うたびにジェネレータ定義するの面倒だし、
この機能だけのためにモジュール定義するのとかも面倒だし、
標準モジュール内であると楽なんですが・・・

813:デフォルトの名無しさん
08/12/27 06:03:34
あの、回答まだでしょうか?

814:デフォルトの名無しさん
08/12/27 08:06:33
正月休みです

815:デフォルトの名無しさん
08/12/27 10:03:05
from 俺のitertools import pair
def pair(iterable, count):
    """
    >>> list(pair(range(10), 3))
    [(0, 1, 2), (3, 4, 5), (6, 7, 8), (9,)]
    """
    iterable = iter(iterable)
    stop = False
    while not stop:
        y = ()
        try:
            for i in range(count):
                y += (iterable.next(), )
        except StopIteration:
            stop = True
        if y: yield y


816:デフォルトの名無しさん
08/12/27 10:46:00
>>812
> この機能だけのためにモジュール定義するのとかも面倒だし、

Pythonのモジュール作るのは別に面倒じゃないと思うんだが……
つーかPythonのスクリプトって特別な呪文を唱えずとも全部モジュールとして
使えるわけだし、せいぜい既存のモジュールとファイル名がかぶらないようにだけ
注意しとけばいい

PYTHONPATH, PYTHONSTARTUP, sitecustomize.pyなどの手段で
sys.pathに自分用スクリプトディレクトリを加えておくといいぞ
Pythonみたいにモジュールが使いやすい言語でコードの再利用を考えないのは損だ

817:デフォルトの名無しさん
08/12/27 11:47:56
>>815>>816
分かりました。
myitertools.py みたいなのを作ってやってみようと思います。

818:デフォルトの名無しさん
08/12/27 11:57:00
ちょっと違うけど短くかけるな
def pair(iterable, n):
    return izip(*[iter(iterable)]*n)

819:デフォルトの名無しさん
08/12/27 11:58:45
うへ,tuple って immutable っていうから
+= みたいなのはなしかと思い込んでた…

820:デフォルトの名無しさん
08/12/27 12:25:32
a += b って a = a + b として処理されるんでないの

821:デフォルトの名無しさん
08/12/27 12:26:35
もちろんそうだよ。

822:デフォルトの名無しさん
08/12/27 12:27:53
>>820
__iadd__()がある場合は__iadd__()で処理される
無い場合は、__add()__を用いて処理される

immutableの場合は当然__iadd__()なんてものはないから
普通に__add()__を用いて新しいオブジェクトが作られる

823:822
08/12/27 12:28:50
なんだ__add()__ってw
まあ意味分かるよね、ごめん

824:デフォルトの名無しさん
08/12/27 21:48:30
>>> zip(*[iter(range(10))]*3)
[(0, 1, 2), (3, 4, 5), (6, 7, 8)]
>>> zip(*[iter(range(10))]*4)
[(0, 1, 2, 3), (4, 5, 6, 7)]

825:デフォルトの名無しさん
08/12/27 22:14:25
>>815 >>818 >>824
この場合は末尾の扱いってどうすべきなのかな

826:デフォルトの名無しさん
08/12/28 00:07:52
用途によって末尾が必要な場合・不要な場合があるけど、
tupleで返す場合の戻り値は >>824 のように固定長にすべきじゃないかな。

また、>>815は、while ループ一巡辺り最大で
tuple += tuple で count - 1個, (iterable.next(), ) で count 個の不要な一時tupleオブジェクトが作成される。
この場合の作業変数はlistを使う方がベター。

827:デフォルトの名無しさん
08/12/28 05:15:16
余りが出たら、最後をデフォルト値で埋めてみる

def padpairs(iterable, n, default=None):
  x = chain(iter(iterable), repeat(default, n-1))
  return pair(x, n)

# pair は >>818 の奴

>>> list(padpairs(range(10),3))
[(0, 1, 2), (3, 4, 5), (6, 7, 8), (9, None, None)]
>>> list(padpairs(range(10),4))
[(0, 1, 2, 3), (4, 5, 6, 7), (8, 9, None, None)]

828:デフォルトの名無しさん
08/12/28 10:12:17
2.6以上ならizip_longestが使える

829:デフォルトの名無しさん
08/12/28 10:32:42
>>827
GJ

830:デフォルトの名無しさん
08/12/28 15:09:27
>>828
2.5でもmap使えばいいだろ

831:デフォルトの名無しさん
08/12/28 15:35:12
愚直にitertools.isliceで。

import itertools

def pair(iterable, count):
    it = iter(iterable)
    while 1:
        a = tuple(itertools.islice(it, count))
        if not a:
            break
        yield a

print list(pair(range(10), 3))


832:デフォルトの名無しさん
08/12/28 16:46:42
俺も考えてみたけど、>>824のシンプルさには敵わないな

>>> import itertools
>>> make_taker = lambda xs, n: lambda: tuple(itertools.islice(xs, n))
>>> iter_take = lambda xs, n: iter(make_taker(iter(xs), n), ())
>>> list(iter_take(range(10), 3))
[(0, 1, 2), (3, 4, 5), (6, 7, 8), (9,)]

833:デフォルトの名無しさん
08/12/28 19:14:36
see also itertoolsのドキュメント内 izip と 例 の grouper関数

834:デフォルトの名無しさん
08/12/29 00:37:20
>>830
mapだとイテレータや巨大なリスト等を扱うとき困る。itertools.imapだと末尾の扱いが若干異なる。
3.0 のbuiltinのmap はitertools.imap相当なので、mapで長さの異なるリストを扱っている場合は3.0への移植の際に注意が必要。
例えば、下のコードは 2.x と 3.0 で結果が異なる。
>>> list(map(lambda *xs:xs, *[iter(range(10))]*3))


835:デフォルトの名無しさん
08/12/29 01:42:21
>>832
nが大きな数になる時を考慮するなら、こっち(islice)の方が効率良さそう。


元質問からは少し外れるけど、file-likeオブジェクトや文字列の場合。

try:
from io import StringIO
except ImportError:
from StringIO import StringIO

def split_nbyte(stream, n):
return iter(lambda :stream.read(n),"")

def split_nbyte_str(s, n):
return group_nbyte(StringIO(s), n)


836:デフォルトの名無しさん
08/12/29 08:17:15

ie = win32com.client.Dispatch('InternetExplorer.Application')
ie.Navigate('URLリンク(www.google.co.jp)')
ie.Visible = True
while ie.busy:
time.sleep(1)
q = ie.document.all('q')
q.Value = 'python'
btnG = ie.document.all('btnG')
btnG.click()

これでGoogleの検索が出来ることが分かったのですが
検索結果を取り出す方法が良く分かりません
どうすれば出来ますか

837:デフォルトの名無しさん
08/12/29 08:32:37
print ie.document.body.innerHTML

838:デフォルトの名無しさん
08/12/29 08:53:40
っつーか
urllib2 じゃいかんのか
なにがしたいのかによるが

839:デフォルトの名無しさん
08/12/29 09:06:23
エラーが出ます><

840:デフォルトの名無しさん
08/12/29 11:12:01
Python3.0なんですが、urllib2がインポートできないのでそうしました。
あきらかに日本語ドキュメントがおかしいです。存在しません。

841:デフォルトの名無しさん
08/12/29 11:14:54
>>840
py3k の使用はもうちょっと待ったほうがいいって。

842:デフォルトの名無しさん
08/12/29 11:18:50
今の日本語ドキュメントは2.5用

843:デフォルトの名無しさん
08/12/29 11:24:02
3.0ではurllib周り大刷新してたはず

844:デフォルトの名無しさん
08/12/29 12:00:25
こんなところで質問する人間が使うバージョンじゃない。> 3.0

845:デフォルトの名無しさん
08/12/29 12:16:30
正式リリースされているんだからもっとレスがついていいと思う

846:デフォルトの名無しさん
08/12/29 12:42:20
英語読めない奴は2.5系使うのがいいよ。

847:デフォルトの名無しさん
08/12/29 12:43:50
英語読めても各種ライブラリを自分で移植したりビルドする気のない奴は(ry

848:デフォルトの名無しさん
08/12/29 12:57:35
正式リリースされたからってすぐ飛びつくもんじゃない。

メーカー製品みたいに、ドキュメントからサポート体制からリリースに合わせて
全力で整えてるわけじゃないんだから。

849:デフォルトの名無しさん
08/12/29 12:59:05
3.0から入るのも良いけれど、その場合は日本語ドキュメントはアテにならないから
英語ドキュメント読まないと。

850:デフォルトの名無しさん
08/12/29 18:34:58
怒濤の勢いで止めとけレスがw

851:デフォルトの名無しさん
08/12/29 19:15:45
僕はパイソンを使う権利が無い、資格が無いという事ですね。
こんなだから日本のPythonユーザの数は少ないんじゃないでしょうか。

明らかにおかしい。

852:デフォルトの名無しさん
08/12/29 19:27:26
どのバージョンも好きに使う権利があるが、
2.5.2がふさわしい。むしろ2.5.2のThe King。

853:デフォルトの名無しさん
08/12/29 19:32:18
>>851
出たばかりだから枯れてないし、情報も出回ってないから、
古いの使っとけ、というアドバイスをそこまで曲解するほうがおかしい。

854:デフォルトの名無しさん
08/12/29 19:38:22
>>851は荒らしだろ、相手にするなよ。
でも>>851の親がイカれた奴なのは確かだ。


855:デフォルトの名無しさん
08/12/29 19:40:42
>>854
相手するなよ

856:デフォルトの名無しさん
08/12/29 19:47:43
ろくにwhat's newも読まずに最新のバージョンを使って、urllib2がインポートできない
からとwin32comを使い、3.0は止めとけばと言われれば僻み丸出しとか馬鹿なの?

857:デフォルトの名無しさん
08/12/29 20:31:39
まあそう煽るなよ
初心者ならドキュメントの類を隅々まで読んでいないのも
一番新しい正式リリース版をインストールするのも、別に不思議なことじゃない

>>851はいつもの釣りだろ

858:デフォルトの名無しさん
08/12/29 20:33:32
まあ普通にバカだわな

859:デフォルトの名無しさん
08/12/29 20:45:17
>>852
っ2.5.4

860:デフォルトの名無しさん
08/12/29 22:27:45
またruby厨の降臨かよ

861:デフォルトの名無しさん
08/12/29 22:47:04
>>847
Ruby使うのやめてPythonにしたのは
各種ライブラリがそろってて
Rubyみたく自分で移植しなくてもよかったから
いまさらPy3kでライブラリ移植する必要が出てくるなら
Ruby使ってた方がまし

862:デフォルトの名無しさん
08/12/29 22:48:08
マニュアルの類は読まないってのが世間一般の常識として浸透してるから
そう目ゴジラ立てて怒らんとってくれ。

863:デフォルトの名無しさん
08/12/29 22:48:56
アドバイスだよ

864:デフォルトの名無しさん
08/12/29 23:00:10
アドバンスなら大いに結構

865:デフォルトの名無しさん
08/12/29 23:00:48
なんかレベルというより年齢層が高くなってきたな。

866:デフォルトの名無しさん
08/12/29 23:06:28
>>861
ならRuby使ってればいいじゃない
誰も君に強制はせんよ

867:デフォルトの名無しさん
08/12/29 23:19:43
エンドユーザーならまだしも開発者がマニュアル読まないとかバカですって言ってるようなもんだろ

868:デフォルトの名無しさん
08/12/29 23:20:47
>>867
もう3.0の仕様を隅々まで把握してんのか?
すげーな

869:デフォルトの名無しさん
08/12/30 00:12:19
>>861
Pythonは、2.x の間は下位互換性を大事にバージョンアップしてきたし、
2.x -> 3.y は下位互換性失われるけど、 3.x -> 3.y はまた互換性をできるだけ
確保しながらバージョンアップしていく。

Rubyだと、1.8->1.9 でも、 1.9->2.0 でも、きっと互換性の問題出るよ。

870:デフォルトの名無しさん
08/12/30 00:28:41
>>868
差分があるしね

871:デフォルトの名無しさん
08/12/30 00:34:38
>>868
必要に応じてマニュアルを読む事とマニュアル全てを把握している事は別

872:デフォルトの名無しさん
08/12/30 01:06:39
>>869
1.8.6→1.8.7でも互換性の問題あるし、
1.8.6でも仕様を替えて互換性がなくなったこともあった。

873:デフォルトの名無しさん
08/12/30 01:35:53
Rubyの問題は仕様が明示されていないことだ。
互換性の問題があるのかどうかすら分からないのだ。
こんな言語を仕事に使おうと思う奴は馬鹿かアホかキチガイだと思う。

874:デフォルトの名無しさん
08/12/30 01:39:47
Python仕事に使ってんのか
いいな

875:デフォルトの名無しさん
08/12/30 01:45:02
3.0 始める人は、What's new, PEP3000 と 2to3 くらいは把握しておいた方がいいと思う。
ライブラリで移動したものも捕捉してくれる。>2to3
- from urllib2 import urlopen
+ from urllib.request import urlopen


ところで、googleでの検索なら API 使ったほうかいいんじゃないかな。

google 検索を urllib でやる場合、UserAgent 等を設定しないといけないので注意。
また、自前で検索結果をパースする場合 BeautifulSoup 使いたいなら 3.0 だとまだちょっと手間がかかる
(windowsユーザにとって)。先日のリリース で BeautifulSoup も 3.0 に対応したみたいだけど、
パッケージ内に diff や パッチを当てるto3.sh が含まれているだけなので、自分でパッチ当てないといけないみたいだし。

876:デフォルトの名無しさん
08/12/30 02:07:46
まあその辺は元からのPythonユーザや、このスレ見てる人にはわかってることでしょ

Pythonとやらを試してみっか、と考えた大量の新規ユーザが
地雷にはまってるだろうことは想像に難くないが

877:デフォルトの名無しさん
08/12/30 03:03:52
>>876
ライブラリが対応しているかどうかはプロジェクトのページを見れば書いて
あるし、まだほとんどのlinuxディストリビューションでは3.0は標準でイン
ストールされていない。その状況には同意しかねる。
それに公式のダウンロードページにもこう書いてある。
> Note that both Python 2.6 and 3.0 are considered stable production
> releases, but if you don't know which version to use, start with
> Python 2.6 since more existing third party software is compatible
> with Python 2 than Python 3 right now.

ここであえて3.0を選ぼうという初心者が大量にいるとは思えない。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5094日前に更新/206 KB
担当:undef