そけっと

超ど基本のsocketプログラムで、基本的に用が足りてる。
マルチコネクションとか必要ないし。

ファームを中央管理するマシンと、各クライアントが一対一で会話できればいい。それもデータ自体はDBが持ってるからトリガーだけでいい。

(そもそもクライアントがDBのデータ変化をトリガーに出来ればsocket自体いらんのだが)

問題はacceptを解除できないことだけ。
クライアントプログラム終了時に
強制終了しないと落とせない。

いろいろ見たけど、みんなselect使えという。
しかしselect使ったプログラムやってみたけど
CPU1スレッド完全に食べちゃう。これはマズイ。

で。とりあえず。
クライアント終了時には別スレッドで
自ら自分のソケットに繋いで
落とす信号をacceptに流すことにした。

こんなやり方してる人、他に見たことないから多分相当馬鹿やってる。でもきれいに動いた。

[8539] hajime (2008/08/18 Mon 11:29)


Re: そけっと

まだ問題はあるけどとりあえずdaemonで動きそう。
これで最低限は保障できる。良かった・・・。

考えてみると、無理にtwisted抜く必要なかったかなと思ったりして。アレでwebサーバ作る人がいるぐらいなんだから、daemon化も大変なわけないよなぁと。

まぁいいや。socketは大事な技術。ちゃんと理解しよう。

[8540] hajime (2008/08/19 Tue 09:16)

たぶんど基本

レンダサーバをlinux化する計画のための準備として。

・クライアントのデーモン化。
・従ってGUI無しバージョン。wx部分を消す。
・twistedを止める。

twistedは大したことに使ってないので、socketに切り替えてしまおうと。
(デーモン + twisted + 実行ファイルbakeの組み合わせに自信が持てなかった)

いやー、GTKエラー出まくるので何かと思ったら
threadingからのGUIへのデータ直接送信はご法度なんですね。同期エラー出まくり。
ちゃんとイベントで返すようにしましょう!

直すの大変でした・・。
twistedはなんでエラー出さずに普通に動いちゃってたんでしょう。意外と偉かったんだな。

[8531] hajime (2008/08/17 Sun 09:59)


Re: たぶんど基本

イベントってGTKのイベントですか?

[8532] hohehohe2 (2008/08/17 Sun 15:09)


Re^2: たぶんど基本

いや、wxの普通のカスタムイベントです。
今までthreadから普通にTextCtrlとかに値流し込んでました。

threadingってGUIではとにかく使うのに
よく今まで落ちなかったな〜、winのせいだったんでしょうか。
Macでたまに出てたエラーもこのせいかも・・・。

あとはsocketですね。苦手意識強いの。
勉強は続く〜(涙

[8533] hajime (2008/08/17 Sun 15:35)


Re^3: たぶんど基本

あ、なるほど。なんかありましたねー(記憶がおぼろげ)。
wxCallAfter便利ですよ。命令を投げるとキューにたまってメインスレッドで実行してくれます。

[8534] hohehohe2 (2008/08/17 Sun 15:49)


Re^4: たぶんど基本

wxCallAfterって、何秒後にやってくれるとかそれだけかと思ってたらプールしてくれるんですか?!
賢いですね…。
wxに甘えまくりです。

ソケットのわかりやすい日本語説明。
たくさんあったけど、このページが一番スッと理解できた。
http://www.ne.jp/asahi/hishidama/home/tech/socket/index.html

[8535] hajime (2008/08/17 Sun 19:34)


Re^5: たぶんど基本

> 賢いですね…。
はい、Maya APIのexecte*CommandOnIdle()のwx版です。
サブスレッドは通信だけに専念して処理はメインでやるのが吉ですねー。

[8536] hohehohe2 (2008/08/18 Mon 03:18)


Re^6: たぶんど基本

自分はここで勉強しました。
http://beej.us/guide/bgnet/output/html/multipage/index.html

[8537] hohehohe2 (2008/08/18 Mon 03:21)


Re^7: たぶんど基本

このサイト、ずいぶんカジュアルな語り口ですねw
ありがとうございます。

[8538] hajime (2008/08/18 Mon 11:23)

怪しい実験

ここ2日は怪しい実験。
64bit以降が、MayamanとAirのせいでどうも上手く計画できない。ついでにVista避けたい。ので手を探るの巻。

linux x64上でMaya2008 x32 + Mayaman + Air x32
->成功。
・win32との速度差を測りたいところ。
・win32上で作ったファイルだと、なぜかshaderパスが狂う。どこの設定なのかまだ発見できない。

leopard + wine + Air x32
->Airが止まる。ライセンスエラーではないかと思ってる。DNSは直したが、wine内でもその設定が生きてるのか不明。IEで試せばわかるなと思ったが、IE立ち上がらない。設定もう少し頑張る必要がある。

[8516] hajime (2008/08/08 Fri 19:44)


Re: 怪しい実験

wine + Fedora7 64bit
本気でlinuxに移行できるか試行中。

避けては通れないwineを試す。
ホトショはwineのメインターゲットとなってるだけあって
難なく通った。

他に必要なもんといったら、Quicktime?
ということで試してみたが、全然ダメ。起動しようとするだけでGnomeごと落ちる。
バージョンごとの評価。
http://appdb.winehq.org/objectManager.php?sClass=application&iId=1029

[8522] hajime (2008/08/11 Mon 21:59)


Re^2: 怪しい実験

以前のバージョンのQuicktimeを落とせる
http://www.oldapps.com/quicktime_player.htm

[8523] hajime (2008/08/11 Mon 22:00)


Re^3: 怪しい実験

PS CS2は通るけどCS3はダメみたい。
うーん、無いよりはいいけど
頼りにするには無理っぽいなぁwine。

もともと無理あるよなー。OSXアプリをlinuxで動くようにする方が可能性あるんじゃね?とか思っちゃうんだけど。

[8524] hajime (2008/08/12 Tue 09:35)


Re^4: 怪しい実験

<メインアプリ>
Maya/Firefox/Thunderbird/boujou
はlinux版あるから問題ない。

<動画再生>
Quicktimeはwineではどうにもならなそう。
MPlayer、djvにffmpegで動画再生はどうにかなんとかできるだろう。

<動画編集>
AfterEffectsもwineはきびしそう。
Shakeはlinux版は古い。
fusionはlinux版あり(32bit)
Nukeもlinux版あり(32bit)

<静止画>
Gimpはphotoshopの肩代わりは無理。
photoshopはCS2が動くかなぁ?というレベル

<他>
Mudboxはwindowsオンリーだが
wineでの動作報告もバージョンによってはある。
タイトにシステムリソースを使うソフトだから
あんまりあてにならないけど。

以上を考えますと。うーん。

[8525] hajime (2008/08/12 Tue 09:51)


Re^5: 怪しい実験

linuxの利点は、ローカルの作業環境よりむしろ
ファームの方で。
GUIもインストールしない極小環境を構築して
限界までメモリを使えること。

ローカルまでlinuxで統一した場合、アーティストサイドからの不満が出るのは目に見えてる。

[8526] hajime (2008/08/12 Tue 09:54)


Re^6: 怪しい実験

妥協点はローカルをvista64bit+人によってはFedora.
ファームはlinuxベース。

ローカルのwindowsパスを含んだmayaファイルなりribファイルをlinuxで扱える形にコンバートするパイプラインを構築。ってのが落としどころ?

できるのか考えてみよう。

[8527] hajime (2008/08/12 Tue 10:02)


Re^7: 怪しい実験

ちゃんと調べてみたら、Mayamanにはwindowsで作業しつつ、
linuxファーム用のribを吐き出すオプションが全部揃ってた。

具体的には
-windowsからでもbatではなくcshを出す。
-パス表記をunixに
-パスの自動リプレース

じゃ、あとはlinux用にレンダークライアントのGUIを剥ぎ取りデーモン化するだけ。

いけそー。

[8528] hajime (2008/08/12 Tue 11:26)


Re^8: 怪しい実験

参考になります。
やっぱりwin<->Linuxのパス問題は面倒ですよね。。

Linuxが良いんですけどねぇ、、難しいですよねぇ、、

でも最近UbuntuをGNOMEで使ってるんですが、アプリケーションさえ整ってれば普通に使う分には問題なさそうな感じかも、と思っていたりはします。

[8529] tai (2008/08/12 Tue 22:34)


Re^9: 怪しい実験

自分はいいんですけど、やっぱ他の大多数は普通のアーティストなので。

彼らがモチベーション下がっちゃうのは良くないと思うんです。(あとサポートめんどい)

djvはQuicktime無しでもどうにかできそうな
素晴らしい可能性を与えてくれてますが、
photoshop無しはあり得ないです。

Xenはちょっと読んでみたけどめんどくさすぎるし。
wineは自分のマシンで精一杯。

となると、OSXがローカルにはとても良いんですよね。
あれならパスも自由にできるし。
MayamanやAirの話がなければ最善の妥協策だと思います。Shakeも安く付いてきますし。

わが社はMayamanの恩恵を最大限に使って、ファーム(と俺のローカルマシン)のみlinux計画を実行しようと思います。
少しパイプラインの整備が必要なので忙しくなりそう。

[8530] hajime (2008/08/13 Wed 09:40)

Mayapadは本気でリリースする気

Mayaでは
commandPort -n ":2224" -eo;

で、外部のpythonで以下を走らせる
#---------- Python ----------#
import socket

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(10)

try:
    r = s.connect(('127.0.0.1', 2222))
    s.send('test message')
    while True:
        data = s.recv(4096)
        print str(data),
    s.close()

except socket.error, e:
    print 'Error: %s' % e
#----------------------------#
これだと無限ループで、強制終了でしか落とせないんですがw
whileで大爆走するのかと思ったけど、ちゃんとrecvで待ってくれるのね。(clientが待つプログラムとか聞いたことないのでこれでいいのか良くわからんけど。)

[8513] hajime (2008/08/07 Thu 09:02)


Re: Mayapadは本気でリリースする気

>>r = s.connect(('127.0.0.1', 2222))
etom.el の番号のままのような・・・♪

[8514] hoge (2008/08/08 Fri 12:22)


Re^2: Mayapadは本気でリリースする気

etom.elはチラ見しましたが、そもそもlisp読めないので参考できなかったです。

このポートはcutterからです。正直何番にすれば適切なのかわからないので放置です。

[8515] hajime (2008/08/08 Fri 19:15)


Re^3: Mayapadは本気でリリースする気

結局、上のコードはまるまる捨てて、selectとかpeerとか使った方法に書き換えました。

動作はするんですがあまり理解できてない・・・。ちゃんと勉強しないといかんですね。

[8517] hajime (2008/08/10 Sun 23:17)


Re^4: Mayapadは本気でリリースする気

かなりうろ覚えですが確かシステムコールのsocket.hでは複数のソケットを監視したりtimeoutができなくてそんなのをやりたい時にはselectを使わないといけなかったような。あとpythonのdoc見るとunixではソケット以外に(パイプとか)全てのファイルデスクリプタを監視できる、とありますね。

[8518] hohehohe2 (2008/08/11 Mon 02:24)


Re^5: Mayapadは本気でリリースする気

これをほぼ丸パクリしました。
http://www.uselesspython.com/chat.pyw

ClientがMayaからの通信を常時待ちつつ、
必要な時にはコマンドを送らなければいけないというのは
もうチャットプログラムみたいなもので、
ならチャットプログラムみたいに書けばいいのかなって。

開発中に2回ほどフリーズを体験して
少しビビってるのですが、とりあえず現状版はキレイに動いています。

数日使ってみて固まらなかったらOKということにしよう。

とにかくMayaが何送ってくるか良くわからんので怖い。

[8519] hajime (2008/08/11 Mon 10:32)


Re^6: Mayapadは本気でリリースする気

Pythonの蔵書からsocket通信の項、streaming Dataの扱いについて書かれているものが大体同じですね。

そうかこれってstreamingなのか。何気なく使ってるストリーミングの意味すらわかってなかったなこりゃ。

[8520] hajime (2008/08/11 Mon 13:56)


Re^7: Mayapadは本気でリリースする気

Mayaとソケットつながった瞬間からCPUの1コア完全に食ってることが判明(汗

うーん。やはりちゃんと読んで理解してみよう。

[8521] hajime (2008/08/11 Mon 15:21)

Mayapad

-Pythonのビジュアルデバッグ
http://d.hatena.ne.jp/tomoemon/20080718/p1

いや、なんか動かなかったんですが、面白いアイディアですねこれ。

そこで思ったのですが、Maya用Pythonエディタとか
あったらいいかなと。名前はMayapad(笑

自分用にはMeadowで別にいいんですが
他のアーティストにEmacsは"絶対に"薦められないので。
なんか彼ら用のが作れたらいいかなと。

こんな感じ?
・wxで独立exe形式。Mayaが落ちても巻き込まれない。
・基本機能。行番号表示、検索置換。Grep。
・多彩な設定機能。ショートカットは全部設定可能。
・シンタックスハイライト。tabやスペースまだ
 Mel用にCのハイライトもできないといかん。
・Mayaとは前回覚えたポートでつなげばいい。
・Mayaでエラーが出たらそのラインを赤くする。
・ステップ実行を色で表示できたらいいな。
 シンタックスカラーと機能がぶつかるようなら
 行番号の方に赤丸表示とかでもいいと思うし。

[8495] hajime (2008/07/25 Fri 08:54)


Re: Mayapad

で、試したことない、問題になるかもしれないのは
ステップ実行とシンタックスハイライト。

ステップ実行はpdbモジュールでやるみたい?
-プログラムをステップ実行する
http://zope.jp/documents/how-to/pdb-debug

ん?なんか違うかな?

[8496] hajime (2008/07/25 Fri 08:55)


Re^2: Mayapad

シンタックスハイライトは、wx内のwrapperライブラリでできるみたいだけどちょっと大変そう。
-Yellowbrain guide to wxPython
http://www.yellowbrain.com/stc/index.html

んー、できるかな?無理かな?

[8497] hajime (2008/07/25 Fri 08:57)


Re^3: Mayapad

http://www.python.jp/pipermail/python-ml-jp/2005-November/003436.html

なんかいいサンプル発見。
日本語に問題があるみたいだけど、
今の環境では問題ない。

とりあえずsyntaxカラーは出来てる。
これをMayaとつなぐのは大したことじゃない。

ステップ実行が、どうしようかなーという感じか?
Mayaにはtmpファイルで送るつもりなので
考えてみるとかなり面倒かも。
(毎行ごとに、出力して待って、とか?でもそれじゃ関数とか全然うまくいかないんじゃ。)

[8498] hajime (2008/07/25 Fri 09:16)


Re^4: Mayapad

721x344 52.8kb

つか、できたわ。

[8499] hajime (2008/07/25 Fri 10:55)


Re^5: Mayapad

このモジュール、信じられないほどメソッドあるなぁ。

Cとかもシンタックスできるみたいだから、melでもいけるはずー。
Mayaとの通信部分はもうMel対応になってるので、
GUIに切り替えスイッチつけて、ファイル読み込み時は拡張子で自動切換えとかでオッケーかな。

あとはメソッドをイジって出来るとこまで作って
(選択範囲のみ実行とかも簡単にできそう)

んで、よく書く構文を定型文みたいに書く機能とかつけて。おお、夢が膨らむw

[8500] hajime (2008/07/25 Fri 10:59)


Re^6: Mayapad

593x434 44.6kb

仕事の合間に一気にGUI組み立てた。
あとは機能書くだけ。

[8501] hajime (2008/07/25 Fri 16:36)


Re^7: Mayapad

オープンソース化できるといいかもしれんということで。
メモ。

Google Code Project Hosting で Web サイト構築
http://webos-goodies.jp/archives/50977305.html

[8502] hajime (2008/07/26 Sat 16:56)


Re^8: Mayapad

大問題発生。

// You can do mult-statement Python scripts, but there won't be a return
// value
python( "import os\nprint os.environ[ 'MAYA_LOCATION' ]" );

ぐあーアホか!
-返り値からエラー箇所に選択を飛ばしたりとか色表示とかする機能が作れないかも。

[8503] hajime (2008/07/27 Sun 17:47)


Re^9: Mayapad

ユーザーのコマンドを想定してるなら無理ですねー。
こちらのコードなら無理矢理;でひっつけたり実行2回に分けたりできますが。
$a = python( "import os;os.environ[ 'MAYA_LOCATION' ]" );
print $a;

ちょっと微妙ですがもしユーザーのコードならコードを全部try exceptでくるんで例外が起きたらtracebackモジュールで発生した例外を文字列にしてどっかに格納するとか。sys.exc_infoやsys.last_tracebackあたりとかtracebackモジュール探せば最後の例外を拾えるものがありそうな気もします。ちょっと散漫で思いつきっぽいですがキーワードの参考にでもしてください。

[8504] hohehohe2 (2008/07/27 Sun 19:17)


Re^10: Mayapad

>コードを全部try exceptでくるんで
>例外が起きたらtracebackモジュールで
>発生した例外を文字列にしてどっかに格納するとか。
>sys.exc_infoや sys.last_tracebackあたりとか

もう一段何かに包んでどうにかしようか・・・とか考えていたのですが、まさにこういうことですね。
なーるーほーどー!助かりました。

土日で完成するかと思ったのですが、65%位までしか持っていけませんでした。
テキストエディタって、気づかなかったけど
思った以上に機能いろいろありますね・・・。

俺がマトモと思える位まで機能つめるには
今週いっぱいかかりそう・・・。

しかも「マトモなテキストエディタ」を作る作業って
面倒ばかりで全然おもしろくねー!!もう既に飽きてるw

面白かったのはMayaと繋いだりするトコだけ。
久々にDBもMayaも無しで作業できるので
ラップトップで図書館とかで作業できるのは良いが、
コーディングの9割部分がつまらん。ぐぞー。

あと今後面白くなりそうと思えるのは
Expression編集機能の実装部分ぐらい。
さっさと完成させて、次行こう。

[8505] hajime (2008/07/28 Mon 10:15)


Re^11: Mayapad

久々にみたらなんですかこれは!!
すーーーげーーー

未だにMayaでコツコツスクリプト書いてる僕とは別次元、、、

にしてもこれおもしろいですね。
すーーーーげーーーーーー

[8511] tai (2008/08/07 Thu 01:12)


Re^12: Mayapad

いや、ほぼwxのおかげ。俺はつないだだけ。

ところで実際アルファ版を社内に出してみて、俺も使ってのだけど、Mayaのメッセージはやはり読めないとダメだと認識。

そうしないと、ScriptEditorを開かないとスクリプティングできない。これでは置き換えられない。

そこでめをつけたのが
commandPort -n ":2224" -eo;
の-eoオプション。これは一切合切全部ソケットに出すモード。

詳しくは次に続く

[8512] hajime (2008/08/07 Thu 08:58)

displaceD plugin

Is the source code for the displaceD plugin available? I have written a similar plugin for windows 64, but the results aren't exactly the same...

[8506] Fernando (2008/07/30 Wed 04:10) mail


Re: displaceD plugin

Nope. sorry.
Although I can advise you, if you want.
Cheers.

[8507] hajime (2008/07/31 Thu 10:37)


Re^2: displaceD plugin

Yes, that would be very helpful, thanks! The problem I get is that for some textures and meshes, I get erroneous displacements at regular intervals... like the sampleShadingNetwork is reading that specific value from some other place in the map... I'm passing only uv's to this function, which I read using the MFnMesh::getUVs function. Reading the uvs by creating an MItMeshVertex from the MItGeometry iterator did not help, only slowed down the plugin... if anyone thinks it would help, I'd be glad to post my sourcecode...

Thanks!!

[8508] Fernando (2008/08/01 Fri 00:22)


Re^3: displaceD plugin

>I'm passing only uv's to this function, which I read using the MFnMesh::getUVs function.

This is the code of sampleShadingNetwork
MRenderUtil::sampleShadingNetwork(
(colorNode+".outColor"),
points.length(),
0,
0,
cameraMat,
( points.length()>0)?&points : NULL,
(uCoords.length()>0)?&uCoords : NULL,
(vCoords.length()>0)?&vCoords : NULL,
NULL,
( points.length()>0)?&points : NULL,
NULL,
NULL,
NULL,
colors,
transps );

I'm giving all position, camera data even it shouldn't be concerned to result.

Most important thing is,
call this function only once in a code.
Instead of calling multiple time, using Array would speed up extreamly.

And way to get UV is,
MItMeshFaceVertex and getUV.

Iterate vertex, stock all vertex+UV data into array, then call sampleShadingNetwork.
And iterate again to deform object.

Hope this advice help you.
Cheers.

[8509] hajime (2008/08/01 Fri 07:12)


Re^4: displaceD plugin

Thanks!

[8510] Fernando (2008/08/05 Tue 00:20)

editor

968x189 35.3kb

整理しなきゃーと思いつつ、はや数ヶ月。

[8480] hajime (2008/06/16 Mon 16:36)


Re: editor

しかも全部インスタントな適当スクリプト。
消してもいいけど勿体無いかなぁ?って感じで。

重い腰を上げてEmacsとMayaをつなぐことに。
MELはとりあえず落ちてるの適当に入れたら出来た。

次はPythonです。
hohehohe2さんが提供しているのを入れてみまして。
とりあえずEmacsからprintを走らせると
Mayaでpythonエラーが出るトコまではいけました。
通信自体は成功してるのでもう少しです。

[8481] hajime (2008/06/16 Mon 16:39)


Re^2: editor

一番大きな違いが一回命令実行するたびにコネクションクローズすることです。lisner.pyのPyCommandChatクラスの中をいじってself.close_when_done()を次のように書き換えるとコネクション切断しないようになります。
self.data = ''
#self.close_when_done()
あとエラー以外の結果を送信元に送らないのも大きな違いです。今自分のプログラム作っててこの仕様がちょっとまずいんで結果も返すよう只今書き換え中です。

[8482] hohehohe2 (2008/06/16 Mon 18:17)


Re^3: editor

なるほど、MEL6,Python4の割合でスクリプトしているのか(w

[8483] hohehohe2 (2008/06/16 Mon 18:18)


Re^4: editor

>MEL6,Python4
な、なるほど!?
後半に行くほどpython率上がっておりますw

ちょっと考えてみました。
Traceback (most recent call last):
File "H:/maya_setups/hajime/2008/plug-ins\pyCommandPortImpl.py", line 51, in doExec
exec cmdstr in __main__.__dict__, __main__.__dict__
File "<string>", line 1
source "c:/WINDOWS/TEMP/etom-4644fS2";

つまり、おくりつけられてくる
source "c:/WINDOWS/TEMP/etom-4644fS2";
がpythonコマンドじゃないよ、エラーってことです。
名前から察するに、Emacsからコマンドを送るetomがなにかしらのtempファイルを作っているのかな。

まったく文法知らないけど、Emacsのelソースを読んでみる。

(let ((tempfile (make-temp-file "etom-")))
(write-region start end tempfile)
;; send source(tempfile)
(with-current-buffer etom-buffer
(let ((last-prompt (count-lines (point-min) (point-max))))
(goto-char (point-max))
(comint-simple-send (get-buffer-process (current-buffer))
(format "source \"%s\";" tempfile))

なるほど、つまりなんであれ、tempfileに保存してMayaに投げつけてるわけね。
(つまりhohehohe2さんのスクリプトは完全に動作してると思われ)

[8484] hajime (2008/06/17 Tue 13:27)


Re^5: editor

解決策は2つ。
1.etom.elを直してきちんとコマンドを送るようにする
2. "source \"%s\";"を、pythonファイルをロード、実行できるMELコマンドに変える。この場合commandportはMaya標準のを使い、MELとして処理する。

2は簡単そうに見えてまだ見つけられてないんだな。

[8485] hajime (2008/06/17 Tue 13:28)


Re^6: editor

あー、なんでsourceを使ってコマンド直接投げないのかわかった。

RedM Studioさん
http://www.redms.com/blog/2008/03/11/vim%e3%81%8b%e3%82%89maya%e3%81%ab%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89%e3%82%92%e9%80%81%e3%82%8b%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b31/
>これだとソケットの仕様上4KB(4096B)までしか送れません。

なるほどねぇ。

[8486] hajime (2008/06/17 Tue 13:31)


Re^7: editor

MELメニューからPyを呼ぶのは
python \"from aaa import *\";
python \"aaa()\"

でも、これはあらかじめPythonパスにファイルがあれば、だし。しかも関数の呼び出しだし。

import *で実行自体はされるのかな?
(基本がわかってねー)

うーん。時間切れ。仕事にもどるっす。

[8487] hajime (2008/06/17 Tue 13:41)


Re^7: editor

これかな。使ったことないですが。
>>> execfile
<built-in function execfile>
>>> print execfile.__doc__
execfile(filename[, globals[, locals]])

Read and execute a Python script from a file.
The globals and locals are dictionaries, defaulting to the current
globals and locals. If only globals is given, locals defaults to it.

>これだとソケットの仕様上4KB(4096B)までしか送れません。
そーなんですよねー。自分もこれ知った時はまさか、と思いました(デリミタ使えよと)。

[8488] hohehohe2 (2008/06/17 Tue 13:42)


Re^9: editor

みつけた。たぶんexecfileだ。
Thanks>taiくんのblog

[8489] hajime (2008/06/17 Tue 13:53)


Re^10: editor

実行はされますよー。  > import *
ただし初回だけです。前にimportされたモジュールを再importしたときには実行はされないです。

[8490] hohehohe2 (2008/06/17 Tue 14:03)


Re^11: editor

一歩前進。
Emacsに
print "abc"

pythonコードとして
execfile("なんたら")を送る。


# execfile("なんたら") #
False {'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__doc__': None, 'pyCommandPortImpl': <module 'pyCommandPortImpl' from '/hajime/2008/plug-ins\pyCommandPortImpl.pyc'>, 'cmds': <module 'maya.cmds' from 'C:\Program Files\Autodesk\Maya2008\Python\lib\site-packages\maya\cmds\__init__.pyc'>}
abc

abcは出てる。

[8491] hajime (2008/06/17 Tue 14:10)


Re^12: editor

>hohehohe2さん
おおっと、すみません気づかなかったです。
亀の一歩ですが進んでおります。

execfile、使えますね。全然知らなかったですが
これ書き途中の小さいスクリプトには便利ですね。

>実行はされますよー> import *
変数を定義すると値が入っている以上、実行されてるはずですもんね。
2度目が省略されるということは、今回のような
エディット途中のスクリプトでは使えないですね。

うあ、やばい仕事しないと(汗

[8492] hajime (2008/06/17 Tue 14:24)


Re^13: editor

動的に関数やクラスが作成されるところはMELと似てますよねー。

>>> cmd1 = "class A(object):pass"
>>> cmd2 = "class B(object):pass"
>>> def f(choice):
... if choice:
... cmd = cmd1
... else:
... cmd = cmd2
... exec cmd
...
>>> f(True)
>>> A()
<__main__.A object at 0x69810>
>>> B()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'B' is not defined

そんなとこも含めてうまいこと言えないですがPythonのふにゃふにゃな所が好きです。

>>> class Z(object):pass
...
>>> class A(Z):
... def fa(self):print "a"
...
>>> class B(Z):
... def fb(self):print "b"
...
>>> a = A()
>>> a.__class__ = B
>>> a
<__main__.B object at 0x69b70>
>>> a.fb()
b
>>> a.fa()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'B' object has no attribute 'fa'
>>> B.__bases__ = (A,)
>>> a.fa()
a

[8493] hohehohe2 (2008/06/17 Tue 21:08)


Re^14: editor

>>> a.fa()
が動かないのはわからなかったです。
本当に使う直前まで定義されてないのですね。

〜EmacsToMayaInPythonの解決法〜
結局プラグインは使わず、melでpythonファイルを実行する方法に落ち着きました・・・。
(format "python( \"execfile('%s')\")" tempfile))

返り値は無視する設定にして、とりあえずめでたし。

[8494] hajime (2008/06/23 Mon 09:34)

前7件  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15  (1-7/100)  次7件