C#ATIA

↑タイトル詐欺 主にCATIA V5 の VBA

Fusion360APIで外部実行ファイルを実行

何となく読み込みが出来そうな気がしてきたので、Fusion360からsiren
呼び出すテストをしようと思ったのですが、大苦戦…。

まず、mruby-sirenの実行ファイルを

C:\Temp\siren_0.14d_mingw64\bin\mruby.exe

の位置になるようにしました。

続いて呼び出し用のsirenスプリクト "test.rb" をこんな感じで作成

#!/usr/bin/env siren
# test.rb
# coding: utf-8

puts "hoge"
puts "piyo"
puts "huga"

中身は、sirenとは無関係なファイルです…。
これをFusion360スプリクトと同一フォルダ内に置いておきます。

続いてFusion360スプリクトでこんな感じのものを作りました。

#FusionAPI_python
#Author-kantoku
#Description-OutprocessTest
#外部実行ファイルを実行

# -*- coding: utf-8 -*-

import adsk.core, adsk.fusion, traceback
_app = adsk.core.Application.get()
_ui = _app.userInterface
_siren_path = r"C:\Temp\siren_0.14d_mingw64\bin\mruby"

def run(context):
    try:
        global _app, _ui
        global _siren_path
        
        import os
        path = os.path.dirname(os.path.abspath(__file__))
        callpath = path + '\\test.rb'
        
        s_path =_siren_path.replace(os.path.sep, '/')
        
        import subprocess
        output = subprocess.check_output([s_path, callpath])
        _ui.messageBox(str(output))
    except:
        if _ui:
            _ui.messageBox('エラー\n{}'.format(traceback.format_exc()))

siren に test.rb を投げつつ、標準出力されたものを取得し表示させるだけです。
実行結果はこちら
f:id:kandennti:20170817171134p:plain
[b'] や [\r\n] 等が入ってますが、取得も出来てます。
・・・たったこれだけなのですが、途中で諦めようかとも思うぐらいでした。