こちらの続きです。
CommandDefinitionsオブジェクト2 - C#ATIA
実はスプリクトでのコマンドの呼び出しの他に、長い間悩んでいた事が
ありました。エンコードです。
こちらのコードは、最初に示したコードとほぼ同じなのですが、
コマンド名(日本語)をファイルに書き出す際にエラーとなります。
#fusion360 python #これはエラーになります。 import adsk.core, adsk.fusion, traceback def run(context): try: app = adsk.core.Application.get() ui = app.userInterface path = r'C:\temp\fusion360_test.csv' cmds = [] for cmd in ui.commandDefinitions: cmds.append('{},{}'.format( cmd.id,cmd.name)) cmds.sort() output = open(path, 'w') output.writelines('\n'.join(cmds)) output.close() except: if ui: ui.messageBox('Failed:\n{}'.format(traceback.format_exc()))
こんな感じのエラーです。
エンコード辺りのエラーだとはわかるのですが、対処方法が判りませんでした。
(自宅PCで出るエラーともちょっと違う・・・)
自宅でのエラーの原因は、エンコードCP932(≒Shift_JIS)では変換出来ない
文字が含まれていた事によるものでした。その対処方法が
cmd.name.encode("CP932", "ignore").decode("CP932")
のようです。今までファイルに書き出せなかったものも、書き出せるようになりそうです。