如何抑制RPGLE中POST/GET操作生成的控制台输出消息
解决RPGLE Axis Web服务客户端控制台输出与回车提示问题
核心原因
该现象是IBM i内置Axis for i Web服务客户端运行时的默认行为:运行时默认会将HTTP状态、请求执行日志输出到标准输出,同时程序结束时会持有终端TTY资源触发回车确认提示,和QSH的输出环境变量无关。
解决步骤
配置Axis运行时专属环境变量
只需在调用Web服务逻辑前设置2个Axis客户端专属环境变量即可完全屏蔽输出和提示,可选择在RPGLE代码内设置,或通过外层CL程序设置:
QIBM_AXIS_CLIENT_LOG_DEST=NONE:禁用所有Axis运行时日志输出到终端QIBM_AXIS_CLIENT_NO_TTY_WAIT=Y:禁用运行时对终端TTY资源的持有,关闭程序结束后的回车提示
若需要保留日志排查问题,可将第一个变量值改为FILE:/ifs/路径/日志文件名.log,日志会写入指定IFS路径,不会输出到控制台。
RPGLE代码内设置示例
直接在程序中调用
Qp0zPutEnv系统函数设置环境变量,需放在第一次调用Web服务接口之前执行:// 声明Qp0zPutEnv系统函数原型 Dcl-Pr Qp0zPutEnv Int(10) ExtProc('Qp0zPutEnv'); EnvString Pointer Value Options(*string); End-Pr; Dcl-S Rc Int(10); // 设置Axis运行时环境变量 Rc = Qp0zPutEnv('QIBM_AXIS_CLIENT_LOG_DEST=NONE'); Rc = Qp0zPutEnv('QIBM_AXIS_CLIENT_NO_TTY_WAIT=Y');CL程序外层设置示例
无需修改现有RPGLE代码,在外层调用的CL程序中提前添加环境变量即可:
ADDENVVAR ENVVAR(QIBM_AXIS_CLIENT_LOG_DEST) VALUE(NONE) REPLACE(*YES) ADDENVVAR ENVVAR(QIBM_AXIS_CLIENT_NO_TTY_WAIT) VALUE(Y) REPLACE(*YES) CALL PGM(你的RPGLE程序名)
验证说明
配置完成后重新编译运行程序,所有Axis自带的HTTP状态输出和回车提示都会被完全屏蔽,不会影响原有Web服务的POST/GET调用逻辑。
内容的提问来源于stack exchange,提问作者aveink
相关产品推荐
相关产品推荐

