z/OSではまだまだ一般的ではありませんが、近年注目されているPythonはz/OSでも利用できます。「IBM Open Enterprise Python for z/OS」としてIBMのWebサイトからダウンロードしてz/OS(USS)へインストールすることができます。IBMのサポートを受けなければ無償で利用できます。
z/OS版Pythonの実行
sshクライアントでUSSシェルにログインして実行する
Unix(Linux)同様に、シェルにログインしてPythonコマンドを実行します。シェル上で実行する分には、z/OSも他のOSも大差はないです。
USS内の所定のディレクトリー(自分のuseridやアプリのディレクトリー等)にPythonのソース・プログラムを格納してからpythonコマンドで実行できます(テスト環境ではpython3)。
python3 hello.py
USSシェル上でのpythonプログラムの実行例です。ついでに同じことを行っているjavaプログラムも実行してみました。UNIXシェル上ではPythonもJavaも似た手順です。(※当然ながらPythonもJavaも追加でインストールされている必要があります)
バッチ・ジョブで実行する
PythonプログラムはUSS内で実行することになりますが、BPXBATCHユーティリティーによってバッチ・ジョブとしてUSSシェルを実行することもできます。
1 2 3 4 5 6 7 8 9 |
//jobname JOB ,CLASS=A,MSGCLASS=A,NOTIFY=&SYSUID //********************************************************************* //BPXBATCH EXEC PGM=BPXBATCH,REGION=0M //STDOUT DD SYSOUT=* //STDERR DD SYSOUT=* //STDPARM DD * SH python3 hello.py /* // |
USSをバッチで起動してUSS内のPythonを実行します。STDPARM内の「SH」は、USSのUNIXシェルを起動することを示します。シェル内でPython3コマンドを実行しています。コマンドに続いて指定している「hello.py」がPythonのソース・プログラムです。指定したプログラムが読み込まれ解釈されて実行されます。
z/OS版Pythonのはろ~わーるど
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
//jobname JOB ,CLASS=A,MSGCLASS=A,NOTIFY=&SYSUID //******************************************************************* //BUILDSRC EXEC PGM=IKJEFT01 //SYSTSPRT DD DUMMY //SYSTSIN DD * OCOPY INDD(SYSUT1) OUTDD(SYSUT2) TEXT //SYSUT2 DD PATHOPTS=(OWRONLY,OCREAT,OTRUNC), // PATH='/u/yourdir/hello.py',PATHMODE=SIRWXU //SYSUT1 DD *,DLM='++' # # Example Python Program under z/OS. # print("Hello World !!") ++ //********************************************************************* //BPXBATCH EXEC PGM=BPXBATCH,REGION=0M //STDOUT DD SYSOUT=* //STDERR DD SYSOUT=* //STDPARM DD * SH python3 hello.py /* // |
MVS上のデータセット(JCL内)にPythonのソース・プログラムを書いた例です。JCL内のソース・プログラムをUSSファイル・システム内に書き込んだ後、次のステップでUSSシェルを起動して実行します。
Pythonは、ソース・プログラムの各行(文)が改行コードで区切られている必要があり行末に改行コードを追加するため、IEBGENERではなくUSSのOCOPYコマンドをTSOバッチ・セッションで実行して、SYSUT1 DDに定義されたストリーム内データセットとしてのPythonソース・プログラムを、SYSUT2 DDに定義された/u/yourdir/hello.pyファイルとしてコピーしています。ストリーム内データセットではなく、区分データセットのメンバーとしてプログラムを作成し格納して、SYSUT1をDSN=dsname(member)で定義してもかまいません。
MVS上でPythonを動かすということで、PythonソースもCOBOLやPL/I同様の80バイト固定長レコードで記述したサンプルを示していますが、TSOのISHELLやOEDITコマンド(あるいはVSCode)などで直接USSファイル・システム内にソース・プログラムのファイルを作成することもできます。その場合、バッチ処理でPythonプログラムを動かすのであれば、最初の例のようにBPXBATCHのステップだけを実行します。