2012-01-26 10 views
1

私はwin32comを使用して、かなりの時間AutoCADにアクセスしています。 makepyユーティリティを適用すると対話型プロンプトでユーザーフレンドリーな体験ができることを知ったので、それを実行して「AutoCAD 2006 Type Library」を追加しました。現在、私がアクセスした共通の属性はもはや利用できません。コードを考えてみましょう:私はmakepy走ったまでは、AutoCAD用のmakepyを介してtypelibを追加しました。現在、win32comはAutoCAD用に動作していません。

acad = win32com.client("AutoCAD.Application") 
doc = acad.Documents.Open('mydoc.dwg') 
ms = doc.ModelSpace 
count = ms.Count #counts all entities in dwg 

for i in range(count): 
    item = ms.Item(i) 
    if 'block' in item.ObjectName.lower(): 
     print item.Name 

Traceback (most recent call last): 
File "<interactive input>", line 1, in <module> 
File "C:\Python27\lib\site-packages\win32com\client\__init__.py", line 462, in 
    __getattr__ raise AttributeError("'%s' object has no attribute '%s'" 
    (repr(self),attr)) 
AttributeError: '<win32com.gen_py.AutoCAD 2006 Type Library.IAcadEntity instance 
    at 0x34894552>' object has no attribute 'Name' 

名前は常にブロックのアクセス属性となっています。私はそれをリセットするかどうかを確認するためにWindows用のPythonを再インストールしようとしましたが、動作しませんでした。

私は削除する必要がある実装で別のファイルを作成しますか?

多くのスクリプトは、Name属性に依存しています。あなたが提供できる提案や助けがあれば幸いです。

+1

まあ、問題に結びついたTempディレクトリにあるgen_pyディレクトリが見つかりました。 gen_pyディレクトリを削除すると、それに応じてすべてが再び動作します。 makepyとAutoCADの間のAPIにバグがありますか? 生成したファイルを解析すると、「名前」がacdbBlock/acdbBlockReferenceクラスのプロパティとして認識されました。スクリプトを実行するときになぜ登録していないのか分かりません。 – ionalchemist

答えて

0

私はwin32comを実行してDELMIAにアクセスすると、同様の問題が発生します。 Delmiaには.tlbファイルのようなものがたくさんあることがわかります。私が入力したとき:

from win32com.client.gencache import EnsureDispatch 
EnsureDispatch('DELMIA.Application') 

Pythonは自動的に単語の例やExcelと同じ、gen_pyディレクトリ\ win32comでいくつかのものを生成します。違いは、生成されたものはDelmiaの1つの.tlbファイルのみであるという点です。私はTLBにいくつかの変数にアクセスした場合、それは大丈夫だ:

docs = delmia.Documents 

私は他のTLBにいくつかの変数にアクセスする場合、私は同様のエラーを満たし:

pdoc = docs.Add('Process') 

Pythonはオブジェクトが持っている「ことを言います...属性はありません... "

私はwin32com \ gen_pyディレクトリ内のすべてのファイルを削除しますが、gen_pyディレクトリは保持しています。今は大丈夫です。

関連する問題