組み込み 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.
>>>
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
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 モジュールから関数を使用します。
プラットフォームによっては、datetime および dateutil モジュールが既定でインストールされていないことがあります。この例を実行して ModuleNotFoundError が発生した場合は、"Python パッケージのインストール" の説明に従って欠落しているモジュールをインストールします。
以下の SELECT 文は、SQL 関数を呼び出し、現在の日付/時刻を東部標準時から協定世界時 (UTC) に変換します。
SELECT tzconvert(now(), 'US/Eastern', 'UTC')
この関数は以下のような結果を返します。
2021-10-19 15:10:05