Skip to main content

Run TSO commands via IKJEFT1B

Project description

batchtsocmd

Run TSO and Db2 commands via IKJEFT1B with automatic encoding conversion.

Description

batchtsocmd is a Python utility for z/OS that executes TSO commands through IKJEFT1B with automatic ASCII/EBCDIC encoding conversion. It handles SYSIN and SYSTSIN inputs from files, automatically converting them to EBCDIC as needed.

The package includes two main commands:

  • batchtsocmd - General TSO command execution
  • db2cmd - Simplified Db2 command execution via DSNTEP2

Features

  • Execute TSO commands via IKJEFT1B
  • Execute Db2 SQL commands via DSNTEP2
  • Automatic ASCII to EBCDIC conversion for input files
  • Optional STEPLIB support
  • Optional DBRMLIB support
  • Configurable output destinations (SYSTSPRT, SYSPRINT)
  • Environment variable support for Db2 parameters
  • Stdin piping support for SQL commands
  • Verbose mode for debugging

Requirements

  • Python 3.8 or higher
  • z/OS operating system
  • IBM Z Open Automation Utilities (ZOAU)
  • zoautil-py package
  • zos-ccsid-converter package

Installation

Note: This package can only be installed and run on z/OS systems.

pip install batchtsocmd

Usage

batchtsocmd - General TSO Command Execution

Basic Usage

batchtsocmd --systsin systsin.txt --sysin input.txt

With Output Files

batchtsocmd --systsin systsin.txt --sysin input.txt \
            --systsprt output.txt --sysprint print.txt

With STEPLIB and Verbose Output

batchtsocmd --systsin systsin.txt --sysin input.txt \
            --steplib DB2V13.SDSNLOAD --verbose

With STEPLIB and DBRMLIB

batchtsocmd --systsin systsin.txt --sysin input.txt \
            --steplib DB2V13.SDSNLOAD --dbrmlib DB2V13.DBRMLIB

With Concatenated STEPLIB Datasets

batchtsocmd --systsin systsin.txt --sysin input.txt \
            --steplib DB2V13.SDSNLOAD:DB2V13.SDSNLOD2:DB2V13.SDSNLOD3

With Concatenated STEPLIB and DBRMLIB Datasets

batchtsocmd --systsin systsin.txt --sysin input.txt \
            --steplib DB2V13.SDSNLOAD:DB2V13.SDSNLOD2 \
            --dbrmlib DB2V13.DBRMLIB:DB2V13.DBRMLI2

Command Line Options

  • --systsin PATH - Path to SYSTSIN input file (required)
  • --sysin PATH - Path to SYSIN input file (required)
  • --systsprt PATH - Path to SYSTSPRT output file or 'stdout' (optional, defaults to stdout)
  • --sysprint PATH - Path to SYSPRINT output file or 'stdout' (optional, defaults to stdout)
  • --steplib DATASET - Optional STEPLIB dataset name(s). Use colon (:) to concatenate multiple datasets (e.g., DB2V13.SDSNLOAD or DB2V13.SDSNLOAD:DB2V13.SDSNLOD2)
  • --dbrmlib DATASET - Optional DBRMLIB dataset name(s). Use colon (:) to concatenate multiple datasets (e.g., DB2V13.DBRMLIB or DB2V13.DBRMLIB:DB2V13.DBRMLI2)
  • -v, --verbose - Enable verbose output
  • --version - Show version number and exit

Notes

  • Input files can be ASCII (ISO8859-1) or EBCDIC (IBM-1047)
  • Encoding is auto-detected via file tags; untagged files are assumed to be EBCDIC
  • Output files will be tagged as IBM-1047
  • Both --systsprt and --sysprint default to 'stdout'
  • When stdout is used, SYSTSPRT output is written first, then SYSPRINT output

db2cmd - Db2 Command Execution

The db2cmd command provides a simplified interface for executing Db2 SQL commands via DSNTEP2.

Basic Usage

# Using command line options
db2cmd --system DB2P --plan DSNTEP12 --toollib DSNC10.DBCG.RUNLIB.LOAD \
    --sysin query.sql

# Using environment variables
export DB2_SYSTEM=DB2P
export DB2_PLAN=DSNTEP12
export DB2_TOOLLIB=DSNC10.DBCG.RUNLIB.LOAD
db2cmd --sysin query.sql

# Using stdin pipe
echo "SELECT * FROM SYSIBM.SYSTABLES;" | db2cmd --system DB2P \
    --plan DSNTEP12 --toollib DSNC10.DBCG.RUNLIB.LOAD

# With STEPLIB
db2cmd --system DB2P --plan DSNTEP12 --toollib DSNC10.DBCG.RUNLIB.LOAD \
    --sysin query.sql --steplib DB2V13.SDSNLOAD

# With DBRMLIB directory
db2cmd --system DB2P --plan DSNTEP12 --toollib DSNC10.DBCG.RUNLIB.LOAD \
    --sysin query.sql --dbrmlib /u/myuser/dbrmlib

# With concatenated STEPLIB datasets
db2cmd --system DB2P --plan DSNTEP12 --toollib DSNC10.DBCG.RUNLIB.LOAD \
    --sysin query.sql --steplib DB2V13.SDSNLOAD:DB2V13.SDSNLOD2

Command Line Options

  • --system ID - Db2 subsystem ID (or set DB2_SYSTEM env var) (required)
  • --plan NAME - Db2 plan name (or set DB2_PLAN env var) (required)
  • --toollib LIB - Db2 tool library (or set DB2_TOOLLIB env var) (required)
  • --sysin PATH - Path to SYSIN input file (optional, reads from stdin if not specified)
  • --systsprt PATH - Path to SYSTSPRT output file or 'stdout' (optional, defaults to stdout)
  • --sysprint PATH - Path to SYSPRINT output file or 'stdout' (optional, defaults to stdout)
  • --steplib DATASET - Optional STEPLIB dataset name(s). Use colon (:) to concatenate multiple datasets
  • --dbrmlib DATASET - Optional DBRMLIB dataset name(s) or directory (or set DB2_DBRMLIB env var). Use colon (:) to concatenate multiple datasets
  • -v, --verbose - Enable verbose output
  • --version - Show version number and exit

Environment Variables

  • DB2_SYSTEM - Default Db2 subsystem ID
  • DB2_PLAN - Default Db2 plan name
  • DB2_TOOLLIB - Default Db2 tool library
  • DB2_DBRMLIB - Default DBRMLIB dataset or directory

Note: Command line options override environment variables.

DBRMLIB Handling

The --dbrmlib option (or DB2_DBRMLIB environment variable) can specify:

  • A dataset name (no slash): DB2V13.DBRMLIB
  • Multiple datasets (colon-separated): DB2V13.DBRMLIB:DB2V13.DBRMLI2
  • A directory path (contains slash): /u/myuser/dbrmlib
    • When a directory is specified, the command scans for .dbm files and uses them as datasets

Notes

  • Input can be from a file (--sysin) or stdin (pipe)
  • SQL commands are automatically padded to 80 bytes per line
  • Output files will be tagged as IBM-1047
  • Both --systsprt and --sysprint default to 'stdout'
  • When stdout is used, SYSTSPRT output is written first, then SYSPRINT output

Python API

version Function

Get the version of the batchtsocmd package:

from batchtsocmd import version

# Get version string
ver = version()
print(f"batchtsocmd version: {ver}")

You can also access the version directly:

from batchtsocmd import __version__

print(f"batchtsocmd version: {__version__}")

tsocmd Function

You can use the tsocmd function directly in Python for general TSO command execution:

from batchtsocmd.main import tsocmd

# Execute TSO command with SYSTSIN and SYSIN files
rc = tsocmd(
    systsin_file="systsin.txt",
    sysin_file="input.txt",
    systsprt_file="output.txt",
    sysprint_file="print.txt",
    steplib="DB2V13.SDSNLOAD",
    verbose=True
)

# With concatenated STEPLIB datasets
rc = tsocmd(
    systsin_file="systsin.txt",
    sysin_file="input.txt",
    steplib=["DB2V13.SDSNLOAD", "DB2V13.SDSNLOD2"],
    dbrmlib=["DB2V13.DBRMLIB", "DB2V13.DBRMLI2"],
    verbose=True
)

# Output to stdout (default)
rc = tsocmd(
    systsin_file="systsin.txt",
    sysin_file="input.txt",
    steplib="DB2V13.SDSNLOAD"
)

Parameters

  • systsin_file - Path to SYSTSIN input file (required)
  • sysin_file - Path to SYSIN input file (required)
  • systsprt_file - Output destination for SYSTSPRT (default: 'stdout')
  • sysprint_file - Output destination for SYSPRINT (default: 'stdout')
  • steplib - Optional STEPLIB dataset(s) - single string or list for concatenation
  • dbrmlib - Optional DBRMLIB dataset(s) - single string or list for concatenation
  • verbose - Enable verbose output

How It Works

The tsocmd function executes TSO commands through the IKJEFT1B batch processor with the following workflow:

  1. Input Validation: Validates that both SYSTSIN and SYSIN input files exist and are readable

  2. Encoding Conversion:

    • Automatically detects file encoding using file tags
    • Converts ASCII (ISO8859-1) files to EBCDIC (IBM-1047) as needed
    • Untagged files are assumed to be EBCDIC and copied as-is
    • Uses the zos-ccsid-converter package for reliable conversion
  3. SYSIN Padding:

    • Pads each line in the SYSIN file to exactly 80 bytes
    • Truncates lines longer than 80 bytes with a warning
    • Ensures proper fixed-length record format for MVS processing
  4. DD Statement Setup:

    • Creates DD statements for IKJEFT1B execution
    • Configures STEPLIB if provided (supports concatenation)
    • Configures DBRMLIB if provided (supports concatenation)
    • Sets up SYSTSIN with converted input
    • Sets up SYSIN with padded and converted input
    • Configures SYSTSPRT and SYSPRINT outputs (file or stdout)
    • Adds SYSUDUMP as DUMMY
  5. Execution:

    • Executes IKJEFT1B using mvscmd.execute_authorized() from ZOAU
    • Runs with proper DD allocations and file definitions
  6. Output Handling:

    • If stdout is requested, reads temporary output files and writes to stdout
    • Outputs SYSTSPRT first, then SYSPRINT (maintaining proper order)
    • Tags output files as IBM-1047 for proper encoding
    • Returns the IKJEFT1B return code
  7. Cleanup:

    • Automatically removes all temporary files
    • Ensures cleanup even if errors occur

This approach provides a seamless way to execute TSO commands from Python with automatic handling of encoding conversions and proper MVS file formats.

db2cmd Function

You can use the db2cmd function directly in Python for Db2 command execution:

from batchtsocmd.main import db2cmd

# Using content string
rc = db2cmd(
    sysin_content="SELECT * FROM SYSIBM.SYSTABLES;",
    system="DB2P",
    plan="DSNTEP12",
    toollib="DSNC10.DBCG.RUNLIB.LOAD",
    steplib="DB2V13.SDSNLOAD",
    verbose=True
)

# Using file
rc = db2cmd(
    sysin_file="query.sql",
    system="DB2P",
    plan="DSNTEP12",
    toollib="DSNC10.DBCG.RUNLIB.LOAD"
)

Parameters

  • sysin_content - SQL commands as a string (mutually exclusive with sysin_file)
  • sysin_file - Path to file containing SQL commands (mutually exclusive with sysin_content)
  • system - Db2 subsystem ID (required)
  • plan - Db2 plan name (required)
  • toollib - Db2 tool library (required)
  • dbrmlib - Optional DBRMLIB dataset(s) - single string or list for concatenation
  • steplib - Optional STEPLIB dataset(s) - single string or list for concatenation
  • systsprt_file - Output destination for SYSTSPRT (default: 'stdout')
  • sysprint_file - Output destination for SYSPRINT (default: 'stdout')
  • verbose - Enable verbose output

License

Apache License 2.0

Author

Mike Fulton

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

batchtsocmd-0.1.11.tar.gz (34.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

batchtsocmd-0.1.11-py3-none-any.whl (17.9 kB view details)

Uploaded Python 3

File details

Details for the file batchtsocmd-0.1.11.tar.gz.

File metadata

  • Download URL: batchtsocmd-0.1.11.tar.gz
  • Upload date:
  • Size: 34.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.12.1.2 readme-renderer/34.0 requests/2.32.5 requests-toolbelt/1.0.0 urllib3/2.6.0 tqdm/4.67.1 importlib-metadata/8.7.0 keyring/25.7.0 rfc3986/2.0.0 colorama/0.4.6 CPython/3.13.1

File hashes

Hashes for batchtsocmd-0.1.11.tar.gz
Algorithm Hash digest
SHA256 de525732af421cf698d094e320b5e339ae42bb03169dc1b73e0afa0243dd336c
MD5 1bd713bfd390a0ac43676f05e4703a78
BLAKE2b-256 fde4625a5a22222ab33bcc39caedd705f05fc7b0af1c2573b18316ff8c0386a2

See more details on using hashes here.

File details

Details for the file batchtsocmd-0.1.11-py3-none-any.whl.

File metadata

  • Download URL: batchtsocmd-0.1.11-py3-none-any.whl
  • Upload date:
  • Size: 17.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.12.1.2 readme-renderer/34.0 requests/2.32.5 requests-toolbelt/1.0.0 urllib3/2.6.0 tqdm/4.67.1 importlib-metadata/8.7.0 keyring/25.7.0 rfc3986/2.0.0 colorama/0.4.6 CPython/3.13.1

File hashes

Hashes for batchtsocmd-0.1.11-py3-none-any.whl
Algorithm Hash digest
SHA256 68956bf0ad96824e3af55ad525025d58764c0fd86cf413b1de0888949ad522db
MD5 423db5293d866eec3ca2dd1262189c4a
BLAKE2b-256 577621f243923cf4b92c7a40aff96a355763d2187839b77f3923b3b337a151ee

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page