Python commands.getstatusoutput() 即使命令失败也返回 0

Python commands.getstatusoutput() returning 0 even though the command failed

我正在通过 Python commands.getstatusoutput() 函数调用执行用于备份的 informix ontape 命令。

示例:

(rc, op) = commands.getstatusoutput("ontape -v -s -L 1|compress -c >/home/compressed/level_1_archive") 

执行上述函数后,return代码rc为0 输出消息op为"Archive failed - ISAM error: An error has occurred during archive back up."

我不明白的是为什么即使命令失败Python returning 0

Python 使用的版本是 2.6.6

问题不在Python这边。 ontape 命令的输出通过管道传输到 gzip 命令。 returned 到 shell 的退出代码是 gzip 命令的 return 代码。 Gzip 命令不会出错,即使它没有从 ontape 命令接收到数据并且 returns 零作为退出代码。

该问题的几个可能的解决方案是:

  1. 在 Informix onconfig 文件中使用 BACKUP_FILTER
  2. 不要将 ontape 的输出通过管道传输到 gzip;而是使用这样的东西:

    "(rc, op) = commands.getstatusoutput("source /source ; ontape -v -s -L 0 -t STDIO | /bin/gzip ; exit ${PIPESTATUS[0]} > /backup/ontape_backup.gz")"