Skip to main content

組み込み Python の実行

このページでは、組み込み Python を実行するいくつかの方法を説明します。

Python シェルから実行

インターシステムズのターミナル・セッションまたはコマンド行から Python シェルを開始できます。

ターミナルからの Python シェルの開始

インターシステムズのターミナル・セッションから Python シェルを開始するには、%SYS.PythonOpens in a new tab クラスの Shell() メソッドを呼び出します。これにより、Python インタプリタがインタラクティブ・モードで起動します。ターミナル・セッションからユーザとネームスペースが Python シェルに渡されます。

コマンド quit() を入力して、Python シェルを終了します。

以下の例は、ターミナル・セッションの USER ネームスペースから Python シェルを起動します。これは、フィボナッチ数列の最初の数個の数字を出力し、その後 InterSystems IRIS の %SYSTEM.OBJ.ShowClasses() メソッドを使用して現在のネームスペース内のクラスのリストを出力します。

USER>do ##class(%SYS.Python).Shell()
 
Python 3.9.5 (default, Jul  6 2021, 13:03:56) [MSC v.1927 64 bit (AMD64)] on win32
Type quit() or Ctrl-D to exit this shell.
>>> a, b = 0, 1
>>> while a < 10:
...     print(a, end=' ')
...     a, b = b, a+b
...
0 1 1 2 3 5 8 >>>
>>> status = iris.cls('%SYSTEM.OBJ').ShowClasses()
User.Company
User.Person
>>> print(status)
1
>>> quit()
 
USER>

メソッド %SYSTEM.OBJ.ShowClasses() は、InterSystems IRIS の %StatusOpens in a new tab の値を返します。この場合、1 はエラーが検出されなかったことを意味します。

コマンド行からの Python シェルの開始

irispython コマンドを使用して、コマンド行から Python シェルを開始します。これは、ターミナルからのシェルの開始とほぼ同様に機能しますが、InterSystems IRIS のユーザ名、パスワード、およびネームスペースを渡す必要があります。

以下の例は、Windows コマンド行から Python シェルを起動します。

C:\InterSystems\IRIS\bin>set IRISUSERNAME = <username>

C:\InterSystems\IRIS\bin>set IRISPASSWORD = <password>

C:\InterSystems\IRIS\bin>set IRISNAMESPACE = USER

C:\InterSystems\IRIS\bin>irispython
Python 3.9.5 (default, Jul  6 2021, 13:03:56) [MSC v.1927 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>

UNIX ベースのシステムでは、set ではなく、export を使用します。

/InterSystems/IRIS/bin$ export IRISUSERNAME=<username>
/InterSystems/IRIS/bin$ export IRISPASSWORD=<password>
/InterSystems/IRIS/bin$ export IRISNAMESPACE=USER
/InterSystems/IRIS/bin$ ./irispython
Python 3.9.5 (default, Jul 22 2021, 23:12:58)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
Note:

IRIS_ACCESSDENIED というメッセージが表示された場合は、%Service_Callin を有効にしてください。管理ポータルで、[システム管理][セキュリティ][サービス] に移動し、[%Service_CallIn] を選択し、[サービス有効] ボックスにチェックを付けます。

Python スクリプト・ファイル (.py) 内で実行

irispython コマンドを発行して、Python スクリプトを実行することもできます。この場合は、InterSystems IRIS へのアクセスを提供する手順 (import iris) を含める必要があります。

Windows システムで、以下のコードを持つ C:\python\test.py ファイルを見てみましょう。

# print the members of the Fibonacci series that are less than 10
print('Fibonacci series:')
a, b = 0, 1
while a < 10:
    print(a, end=' ')
    a, b = b, a + b

# import the iris module and show the classes in this namespace
import iris
print('\nInterSystems IRIS classes in this namespace:')
status = iris.cls('%SYSTEM.OBJ').ShowClasses()
print(status)

test.py は、コマンド行から以下のように実行できます。

C:\InterSystems\IRIS\bin>set IRISUSERNAME = <username>

C:\InterSystems\IRIS\bin>set IRISPASSWORD = <password>

C:\InterSystems\IRIS\bin>set IRISNAMESPACE = USER

C:\InterSystems\IRIS\bin>irispython \python\test.py
Fibonacci series:
0 1 1 2 3 5 8
InterSystems IRIS classes in this namespace:
User.Company
User.Person
1

UNIX ベースのシステムでは、set ではなく、export を使用します。

/InterSystems/IRIS/bin$ export IRISUSERNAME=<username>
/InterSystems/IRIS/bin$ export IRISPASSWORD=<password>
/InterSystems/IRIS/bin$ export IRISNAMESPACE=USER
/InterSystems/IRIS/bin$ ./irispython /python/test.py
Fibonacci series:
0 1 1 2 3 5 8
InterSystems IRIS classes in this namespace:
User.Company
User.Person
1
Note:

import iris を実行しようとして、IRIS_ACCESSDENIED というメッセージが表示された場合は、%Service_Callin を有効にしてください。管理ポータルで、[システム管理][セキュリティ][サービス] に移動し、[%Service_CallIn] を選択し、[サービス有効] ボックスにチェックを付けます。

InterSystems IRIS クラスのメソッド内で実行

Language キーワードを使用して、InterSystems IRIS クラス内で Python メソッドを記述できます。その後、ObjectScript で記述されたメソッドを呼び出す場合と同じように、メソッドを呼び出せます。

例えば、Python で記述されたクラス・メソッドを持つ以下のクラスを取り上げます。

Class User.EmbeddedPython
{

/// Description
ClassMethod Test() As %Status [ Language = python ]
{
    # print the members of the Fibonacci series that are less than 10
    print('Fibonacci series:')
    a, b = 0, 1
    while a < 10:
        print(a, end=' ')
        a, b = b, a + b

    # import the iris module and show the classes in this namespace
    import iris
    print('\nInterSystems IRIS classes in this namespace:')
    status = iris.cls('%SYSTEM.OBJ').ShowClasses()
    return status
}

}

このメソッドは、ObjectScript から以下のように呼び出せます。

USER>set status = ##class(User.EmbeddedPython).Test()
Fibonacci series:
0 1 1 2 3 5 8
InterSystems IRIS classes in this namespace:
User.Company
User.EmbeddedPython
User.Person

USER>write status
1

または Python から以下のように呼び出せます。

>>> import iris
>>> status = iris.cls('User.EmbeddedPython').Test()
Fibonacci series:
0 1 1 2 3 5 8
InterSystems IRIS classes in this namespace:
User.Company
User.EmbeddedPython
User.Person
>>> print(status)
1

SQL 関数およびストアド・プロシージャ内で実行

組み込み Python を使用して SQL 関数またはストアド・プロシージャを記述することもできます。これには、以下のように CREATE 文で引数 LANGUAGE PYTHON を指定します。

CREATE FUNCTION tzconvert(dt TIMESTAMP, tzfrom VARCHAR, tzto VARCHAR)
    RETURNS TIMESTAMP
    LANGUAGE PYTHON
{
    from datetime import datetime
    from dateutil import parser, tz
    d = parser.parse(dt)
    if (tzfrom is not None):
        tzf = tz.gettz(tzfrom)
        d = d.replace(tzinfo = tzf)
    return d.astimezone(tz.gettz(tzto)).strftime("%Y-%m-%d %H:%M:%S")
}

コードは Python の datetime および dateutil モジュールから関数を使用します。

Note:

プラットフォームによっては、datetime および dateutil モジュールが既定でインストールされていないことがあります。この例を実行して ModuleNotFoundError が発生した場合は、"Python パッケージのインストール" の説明に従って欠落しているモジュールをインストールします。

以下の SELECT 文は、SQL 関数を呼び出し、現在の日付/時刻を東部標準時から協定世界時 (UTC) に変換します。

SELECT tzconvert(now(), 'US/Eastern', 'UTC')

この関数は以下のような結果を返します。

2021-10-19 15:10:05
FeedbackOpens in a new tab