Pythonスクリプトの実行

5 件の投稿を閲覧中 - 1 ~ 5 件(全 5 件)
  • 著者
    投稿
  • #6971
    TM555
    一般参加者

    スクリプト実行コンポーネントでPythonを使用する方法を教えてください。
    現在「Error: スクリプト実行エンジンが取得できません({0})」となってうまくいっていません。

    試したこと
    (1) スクリプトJava.mzax
    まずJavaで数値フィールドの内容を読み取ってダイアログに表示するプログラムを書くと
    希望どおりの動作をします。

    スクリプト実行コンポーネントの属性
    Language: java
    StoredScript: return a;

    (2) スクリプトPython.mzax
    次にLanguageをpythonに変更すると、
     Error: スクリプト実行エンジンが取得できません({0})
    ダイアログが出ます。

    スクリプト実行コンポーネントの属性
    Language: python
    StoredScript: return a

    【事前に行ったクラスパスの追加】
    https://staff.aist.go.jp/y-furukawa/memo_mz_dev_interpreter.html
    > 現状ではMZ本体に含めていませんが、リンク先からjython.jarを取得して、 MZかJavaのパスに追加すれば使えるようにしてあります。 その際、コンポーネント側の設定として、属性Languageの指定を”python”または”jython”とします。

    との記述がありましたが、現バージョン3.6_64ではjythonがもともと (インストール先)\jars\Jython にありましたので、
    (インストール先)¥etc\PlatformClassPath.ini に 「jars\Jython\jython.jar」 の行を追加しました。

    • このトピックは編集されました。 1 年, 9 ヶ月 前 by TM555
    • このトピックは編集されました。 1 年, 9 ヶ月 前 by TM555
    #6975
    MZPlatformユーザー会
    サイト管理者

    お問い合わせありがとうございます。

    手元のPCで試しましたところ、jythonのバージョン2.7.3と2.7.2の環境ではアプリケーションを実行すると、お知らせいただいた通り『スクリプト実行エンジンが取得できません』というエラーが発生しました。
    旧バージョンの2.7.1のJythonをダウンロードし、jython.jarをMZPlatformインストールフォルダ―\Java\jre8_mz3.6(_64)\lib\extフォルダーに入れ、アプリケーションを実行したところ動作しました。

    jythonの開発者も以前と変わり、あまり必要な情報が公開されていない状況で、原因究明には時間が掛かっております。
    現在のところ、jython2.7.1を使って、お試しいただくことになってしまいます。
    ご不便をお掛けいたしますが、もし何か分かりましたら、またご連絡いたします。

    また、設定されている「現在の環境で保存スクリプトを実行する(戻り値あり)」の処理では「SyntaxError: ‘return’ outside function」が発生してしまうため、メソッド「現在のスクリプト環境から変数を取得する()」に変更すると値を取得できました。

    大変お手数をお掛けいたしますが、以上お試しいただきご不明な点等ございましたら、どうぞ再度ご連絡ください。
    よろしくお願い申し上げます。

    #6976
    TM555
    一般参加者

    ご回答ありがとうございます。
    jython 2.7.1を使用することで、スクリプト実行は動作するようになりました。

    「現在の環境で保存スクリプトを実行する(戻り値あり)」の代わりに「現在のスクリプト環境から変数を取得する()」を使用する件ですが、
     取得方法: 固定値
     メソッド/値: a
    としましたがこれで合っていますでしょうか?

    こうすると確かにスクリプト中のaの値が取得できるのですが、スクリプト自体が実行されないので、例えばスクリプトを
    a *= 2; return a
    と記述したとしてもaが2倍されることなく元の値が返ってきてしまいます。
    どのようにすべきでしょうか?

    #6977
    MZPlatformユーザー会
    サイト管理者

    ご連絡ありがとうございます。
    「a*=2」のみを保存スクリプトに設定して、現在の環境で保存スクリプトを実行した後、変数の取得をお試しください。
    このとき、少し手元で試した限りでは数値型の関係でaがint値でないとエラーが出てしまいましたので[数値入力フィールド]の数値型を「BigIntegr」に変更し、他にも演算に変数を用いる場合(例:a=a*b)には[整数(BigInteger)格納変数]に一旦格納してint値を取得して変数に設定してお試しください。

    また、もう少し複雑な式の場合には、関数を先に定義してから変数を定義してください。
    例えば以下のようになります。
    def average(nums):
    return sum(nums)/len(nums)
    a= average([1,3,5,7,9])
    メソッド/値欄に入力するとき、改行文字を保持するにチェックを入れて、returnの前にだけ1つスペースを入れてお試しください。(スペースの有り無しで引っ掛かりました)
    この後変数を取得します。

    以上お試しいただき、ご不明な点がございましたら、どうぞ再度ご連絡ください。
    よろしくお願い申し上げます。

    #6980
    TM555
    一般参加者

    おかげさまでPythonスクリプト環境への変数の設定・取得、スクリプト実行も問題なくできるようになりました。
    また、変数をDoubleにして関数定義を使った場合も動作確認できました。
    どうもありがとうございました。

5 件の投稿を閲覧中 - 1 ~ 5 件(全 5 件)
  • このトピックに返信するには、ログインしてください。