Python モジュールのサーチパスの表示方法 ( 以下は、Mac OS X での実行結果
>>> import sys
>>> print sys.path
['', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload', '/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/PyObjC', '/Library/Python/2.7/site-packages']
2013年8月14日水曜日
2013年8月6日火曜日
[python] COMコンポーネントを利用してみる
今回は、WindowsにてpythonでCOMコンポーネントを利用してみます。
pythonは既にインストール済みとして、
まず、必要なライブラリをインストールします。
http://sourceforge.net/projects/pywin32/
からインストールされているpythonのバージョンのインストーラーをダウンロードして、インストール。
これで、[python-install-dir]\Lib\site-packages にライブラリがインストールされます。
次に自分の環境にどのようなCOMコンポーネントがインストールされているか確認する。
Windows SDKをインストールして。以下を管理者権限で実行。
regsvr32 "c:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\IViewers.Dll"
そして、Oleview.exeを管理者権限で実行。ちなみに自分の環境では、C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin に当該プログラムがインストールされていた。
ツリーの「Type Libraries」で各COMコンポーネントのインタフェースを確認することができる。
pythonは既にインストール済みとして、
まず、必要なライブラリをインストールします。
http://sourceforge.net/projects/pywin32/
からインストールされているpythonのバージョンのインストーラーをダウンロードして、インストール。
これで、[python-install-dir]\Lib\site-packages にライブラリがインストールされます。
次に自分の環境にどのようなCOMコンポーネントがインストールされているか確認する。
Windows SDKをインストールして。以下を管理者権限で実行。
regsvr32 "c:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\IViewers.Dll"
そして、Oleview.exeを管理者権限で実行。ちなみに自分の環境では、C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin に当該プログラムがインストールされていた。
ツリーの「Type Libraries」で各COMコンポーネントのインタフェースを確認することができる。
次に、各タイプライブラリのpython用ソースを生成する。win32com clientのインストールディレクトリに移動して、
cd C:\usr\local\python\2_7_5\Lib\site-packages\win32com\client
以下を実行
python makepy.py
すると利用可能なタイプライブラリの一覧が表示されるので。ソースを生成したいライブラリを選択して「OK」を押下。
ここでは、iTunesを選択してみた。生成したタイプライブラリの情報は、
python make.py -i "iTunes 1.13 Type Library"
で確認することができる。
さてようやくサンプルコードですが。。。
>>> import win32com.client
>>> foo = win32com.client.Dispatch("iTunes.Application")
>>> foo.Quit()
ウィンドウを最小化したり、音量を変更したりできるみたいですが今日はここまで
-Reference-
Quick Start to Client side COM and Python
2013年7月30日火曜日
[Network] IPアドレスの衝突
最近普段自分が利用するIPネットワークが不安定にたまにホストの名前解決に失敗する
ネットワークの構成変更をしたばかりでもあり、一番可能性が疑われるIPアドレスの衝突の調査をしてみる。
BSD系OS/Windows
[1] arpテーブルを全て削除
arp -d # BSD系OSの場合 root権限で
[2] テーブルエントリーの追加のために衝突が疑われるアドレスに対してping
ping dst-address
[3] arpテーブルの表示
arp -a
上記手順を数回繰り返して、[3]で表示されるMACアドレスが複数あれば、IPアドレスが衝突していることになる。
ネットワークの構成変更をしたばかりでもあり、一番可能性が疑われるIPアドレスの衝突の調査をしてみる。
BSD系OS/Windows
[1] arpテーブルを全て削除
arp -d # BSD系OSの場合 root権限で
[2] テーブルエントリーの追加のために衝突が疑われるアドレスに対してping
ping dst-address
[3] arpテーブルの表示
arp -a
上記手順を数回繰り返して、[3]で表示されるMACアドレスが複数あれば、IPアドレスが衝突していることになる。
2013年7月23日火曜日
[FreeBSD] GUI環境構築
DM に xfce4 を採用してGUI環境を構築したが、シャットダウン、リブートを一般ユーザーが出来ない
これを解決するためには、/usr/local/etc/polkit-1/localauthority/50-local.d/org.freedesktop.consolekit.pkla を作成して以下を記述する
そして、シャットダウン、リブートを許可したいユーザーをpowerグループに所属させる
これを解決するためには、/usr/local/etc/polkit-1/localauthority/50-local.d/org.freedesktop.consolekit.pkla を作成して以下を記述する
[Local restart]
Idendity=unix-group:power
Action=org.freedesktop.consolekit.system.restart
ResultAny=yes
ResultInactive=yes
ResultActive=yes
[Local shutdown]
Idendity=unix-group:power
Action=org.freedesktop.consolekit.system.stop
ResultAny=yes
ResultInactive=yes
ResultActive=yes
[Local restart - multiple]
Idendity=unix-group:power
Action=org.freedesktop.consolekit.system.restart-multiple-users
ResultAny=yes
ResultInactive=yes
ResultActive=yes
[Local shutdown - multiple]
Idendity=unix-group:power
Action=org.freedesktop.consolekit.system.stop-multiple-users
ResultAny=yes
ResultInactive=yes
ResultActive=yesそして、シャットダウン、リブートを許可したいユーザーをpowerグループに所属させる
2013年7月8日月曜日
[FreeBSD] ports チェックサム unmatched
portsにてgmakeをコンパイル、インストールしようとしたら、チェックサムが合わないと言われた。
make distclean
でダウンロードしてきたファイルを削除して
make checksum
でハッシュ値を計算しなおしたらいけた。
make distclean
でダウンロードしてきたファイルを削除して
make checksum
でハッシュ値を計算しなおしたらいけた。
[libxml2] XPath によるxmlのパース
APIの多さと初心者向けの情報の少なさで苦戦してますが、ようやく超最低限なパースができたのでメモ
パースするXMLファイル
<?xml version="1.0" encoding="us-ascii" ?>
<orchestra>
<players num="3">
<player>aoki</player>
<player>nakashima</player>
<player>suzuki</player>
</players>
</orchestra>
パースするXMLファイル
<?xml version="1.0" encoding="us-ascii" ?>
<orchestra>
<players num="3">
<player>aoki</player>
<player>nakashima</player>
<player>suzuki</player>
</players>
</orchestra>
コード
#include <stdio.h>
#include <libxml/xmlreader.h>
#include <libxml/xpath.h>
int main(int argc, char **argv){
char *xml;
char *xmlPath;
int i;
xmlXPathContextPtr cntxt;
xmlXPathObjectPtr xmlObj;
xmlDocPtr doc;
xmlNodeSetPtr nodes;
xmlNodePtr node;
struct _xmlAttr *curAttr;
xml = argv[1];
xmlPath = argv[2];
doc = xmlParseFile(xml);
if(!doc) return -1;
cntxt = xmlXPathNewContext(doc);
if(!cntxt) return -1;
xmlObj = xmlXPathEvalExpression((xmlChar *) xmlPath, cntxt);
if(!xmlObj) return -1;
nodes = xmlObj->nodesetval;
// iterate node
for(i=0;i<nodes->nodeNr; i++){
node = xmlXPathNodeSetItem(nodes, i);
// node name
printf("=%s=\n", node->name);
// properties
curAttr = node->properties;
while( curAttr != NULL ){
printf("%s: %s\n", curAttr->name, curAttr->children->content);
curAttr = curAttr->next;
}
if(node->children->content != NULL ){
printf("content= %s\n", node->children->content);
}
}
xmlXPathFreeContext(cntxt);
xmlFreeDoc(doc);
xmlCleanupParser();
return 0;
}
実行
./a.out sample/01.xml "//*"
出力
=orchestra=
content=
=players=
num: 3
content=
=player=
content= aoki
=player=
content= nakashima
=player=
content= suzuki
上記サンプルには、値を含んでいないcontentのケアを含んでいない。
参考サイト: http://d.hatena.ne.jp/hakutoitoi/20090319/1237397160 取っ掛かりのコード
2013年6月28日金曜日
[FreeBSD] Sieve を書いてみた
Sieve は、メールフィルタリングのための言語です。
メールサーバー上にフィルタリングルールを定義したファイルを予め置いておき、サーバー上でメールをフィルタリングすることでクライアントの環境に依存しない点が売りです。
今回は、Sieve の Dovecot 向け実装であるPIGENHOLEをインストールしてみました。
[A] インストール
インストール自体は、メールサーバーにて
cd /usr/ports/mail/dovecot2-pgenhole/
make config-recursive
make
make install clean
で終了。
PIGENHOLE のSieve は、Dovecotのプラグインとして提供されているのでこのプラグインを有効にします。この設定は、受信したメールのローカルユーザーへの配信をLDA/LMTPのどちらで行なっているかに依存するので予め確認しておく必要があります。デフォルトでは、LDAを用いているようです。
以下LDAの場合の例 /usr/local/etc/dovecot/conf.d/90-plugin.conf に以下を追加
protocol lda{
mail_plugins = sieve
}
[B} フィルタリングルール作成
フィルタリングルールは、ルールを適用したいユーザーのホームディレクトリに「.dovecot.sieve」を作成してこのファイルの中に記述していきます。
以下はそのサンプル。
require ["fileinto"];
if address :is "from" "foo@example.jp" {
fileinto "INBOX.spam";
}
foo@example.jp からのメールをspamフォルダーに振り分けます。そしてこの.dovecot.sieveを以下コマンドでコンパイルして「~/.dovecot.svbin」として出力します。
sievec ~/.dovecot.sieve ~/.dovecot.svbin
これで次回メール受信時から作成したルールが適用されます。ルールが適用されないようであれば~/.dovecot.sieve.log にログが出力されるので参考にします。
今回は、ここまで
今後は、スクリプトファイルのUNICODE対応やThunderbirdのsieveのスクリプトを編集できるAdd On等を試してみたい。。。
メールサーバー上にフィルタリングルールを定義したファイルを予め置いておき、サーバー上でメールをフィルタリングすることでクライアントの環境に依存しない点が売りです。
今回は、Sieve の Dovecot 向け実装であるPIGENHOLEをインストールしてみました。
[A] インストール
インストール自体は、メールサーバーにて
cd /usr/ports/mail/dovecot2-pgenhole/
make config-recursive
make
make install clean
で終了。
PIGENHOLE のSieve は、Dovecotのプラグインとして提供されているのでこのプラグインを有効にします。この設定は、受信したメールのローカルユーザーへの配信をLDA/LMTPのどちらで行なっているかに依存するので予め確認しておく必要があります。デフォルトでは、LDAを用いているようです。
以下LDAの場合の例 /usr/local/etc/dovecot/conf.d/90-plugin.conf に以下を追加
protocol lda{
mail_plugins = sieve
}
[B} フィルタリングルール作成
フィルタリングルールは、ルールを適用したいユーザーのホームディレクトリに「.dovecot.sieve」を作成してこのファイルの中に記述していきます。
以下はそのサンプル。
require ["fileinto"];
if address :is "from" "foo@example.jp" {
fileinto "INBOX.spam";
}
foo@example.jp からのメールをspamフォルダーに振り分けます。そしてこの.dovecot.sieveを以下コマンドでコンパイルして「~/.dovecot.svbin」として出力します。
sievec ~/.dovecot.sieve ~/.dovecot.svbin
これで次回メール受信時から作成したルールが適用されます。ルールが適用されないようであれば~/.dovecot.sieve.log にログが出力されるので参考にします。
今回は、ここまで
今後は、スクリプトファイルのUNICODE対応やThunderbirdのsieveのスクリプトを編集できるAdd On等を試してみたい。。。
登録:
投稿 (Atom)

