You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Paramiko执行hex命令报错:需-b参数及批处理启动程序问题咨询

解决hex命令批处理模式的启动程序问题

让我们一步步拆解你的问题,帮你理清报错原因和解决方向:

先理解两个报错的本质

  1. 第一个报错:Redirection or piping of stdin or stdout is allowed only with -b
    这个错误很明确:你使用-p参数时,尝试通过stdin.write('test')给hex命令传输入,但-p模式不支持标准输入的管道/重定向操作。hex命令要求如果要做这种输入输出的重定向,必须切换到批处理模式(即使用-b参数)。

  2. 第二个报错:Batch-mode X requires a startup procedure
    当你切换到-b批处理模式后,hex命令需要一个启动程序/脚本来定义整个批处理的操作流程——它不会直接读取你通过stdin传入的零散输入,而是需要一个结构化的指令文件来告诉它该做什么。


解决方向一:找到批处理模式的启动程序要求

你可以通过以下几种方式获取启动程序的规范:

  • 查看hex命令的内置帮助:在远程服务器上执行hex -h或者hex --help,重点关注-b参数的说明部分,里面通常会明确启动程序的格式、命名规则或者示例。
  • 查阅man手册:如果hex命令有官方手册,执行man hex,搜索“batch mode”或者“-b”相关章节,这里会详细说明启动程序的结构(比如需要包含哪些指令、如何处理输入输出)。
  • 寻找同目录的示例文件:检查你的database_list.pf所在目录,或者hex命令的安装目录,有没有类似batch_sample.p、startup_example.proc这类后缀的文件,它们大概率是官方提供的启动程序示例,直接参考写法即可。

解决方向二:正确使用批处理模式(常规做法)

通常来说,hex的批处理启动程序是一个包含一系列操作指令的文本文件,比如:

# 示例启动程序内容(假设后缀为.p)
# 定义输入内容
INPUT test
# 指定要处理的文件
PROCESS /path/to/another_file.p
# 输出结果到指定文件
OUTPUT /path/to/result.txt

然后你需要把这个启动程序的路径作为参数传给-b,修改后的hex命令应该是:

/path/to/hex_file/hex -h 35 -cpterm iso8859-1 -cpstream ibm850 -pf /path/to/databases_list/database_list.pf -b /path/to/your_startup_procedure.p

这样hex命令会加载这个启动程序,按照里面的指令自动执行,无需再通过stdin传输入。


解决方向三:通过stdin直接传入启动指令(替代方案)

有些工具的批处理模式允许用-作为启动程序路径,来直接读取stdin中的指令。你可以尝试修改hex命令为:

/path/to/hex_file/hex -h 35 -cpterm iso8859-1 -cpstream ibm850 -pf /path/to/databases_list/database_list.pf -b -

然后在你的Paramiko脚本中,传入符合格式的启动指令,记得刷新缓冲区:

command = "cd /path/to/command_file; sh command;"
stdin, stdout, stderr = ssh.exec_command(command)
# 传入批处理指令,每条指令换行结尾
stdin.write('INPUT test\nPROCESS /path/to/another_file.p\n')
stdin.flush()  # 必须刷新,确保指令被发送到远程进程
lines = stdout.readlines()
print(lines)
ssh.close()

注意:这种方式需要确保你传入的指令完全符合hex批处理模式的语法要求,否则还是会报错。


内容的提问来源于stack exchange,提问作者ThRnk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 18:12:44