記事
· 2024年3月11日 2m read

Embedded Pythonで$LIST()形式のデータを扱う方法

これは InterSystems FAQ サイトの記事です。

現時点(2024年3月)では、コミュニティに掲載されているPythonライブラリ「iris-dollar-list」を利用することでIRISの$LIST()形式のデータをPythonのリストとして利用することができます。

※標準ツールではありませんがご利用いただけます。詳細はコミュニティの記事「もう1つの $ListBuild() の実装:Pythonライブラリ「iris-dollar-list」」をご参照ください。

WindowsにインストールしたIRISで使用する場合は、以下の方法で「iris-dollar-list」をインストールしてください。

※Windows以外にインストールしたIRISでは、pipコマンドを利用した通常の方法でインストールできます。

コマンドプロンプトを開き、以下実行します。(IRISをデフォルトインストールしたときのディレクトリで掲載しています)

> cd C:\InterSystems\IRIS\bin
> irispip install --target C:\InterSystems\IRIS\mgr\python iris-dollar-list

実行例は以下の通りです。

USER>set ^ListTest=$LISTBUILD("test","あいうえお",101)

USER>:py

Python 3.10.12 (main, Jun 11 2023, 05:26:28) [GCC 11.4.0] on linux
Type quit() or Ctrl-D to exit this shell.
>>> from iris_dollar_list import DollarList
>>> glo=iris.gref("^ListTest")
>>> pythonlist=DollarList.from_bytes(glo[None].encode('ascii')).to_list()
>>> pythonlist
['test', 'あいうえお', 101]
>>>

この他に、現時点では日本語が使用できませんが、英数字であれば%SYS.PythonクラスのToList()メソッドを使用する方法もあります(将来のバージョンで日本語もサポートされる予定です)

2024/6/28更新:バージョン2024.1以降では、$LISTBUILD()に日本語が含まれていても、正しくPython リストに変換できるようになりました。詳しくは、 @Ayumu Tanaka さんが記載された返信に含まれる例文をご参照ください。 
 

実行例は以下の通りです。

USER>set ^ListTest2=$LISTBUILD(123,"hello")

USER>:py

Python 3.10.12 (main, Jun 11 2023, 05:26:28) [GCC 11.4.0] on linux
Type quit() or Ctrl-D to exit this shell.
>>> glo=iris.gref("^ListTest2")
>>> pythonlist=iris.cls("%SYS.Python").ToList(glo[None])
>>> pythonlist
[123, 'hello']
>>> 
ディスカッション (1)2
続けるにはログインするか新規登録を行ってください

%SYS.Python クラスの ToList() を2024.1で試したところ、日本語も使用可能になっていますね。

USER>set ^ListTest=$LISTBUILD("test","あいうえお",101)
 
USER>:py
 
Python 3.9.5 (default, Apr 30 2024, 17:05:29) [MSC v.1927 64 bit (AMD64)] on win32
Type quit() or Ctrl-D to exit this shell.
>>> glo=iris.gref("^ListTest")
>>> pythonlist=iris.cls("%SYS.Python").ToList(glo[None])
>>> pythonlist
['test', 'あいうえお', 101]
>>> quit()
 
USER>write $zversion
IRIS for Windows (x86-64) 2024.1 (Build 267_2U) Tue Apr 30 2024 16:35:10 EDT
USER>