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 零作为退出代码。
该问题的几个可能的解决方案是:
- 在 Informix onconfig 文件中使用 BACKUP_FILTER
不要将 ontape 的输出通过管道传输到 gzip;而是使用这样的东西:
"(rc, op) = commands.getstatusoutput("source /source ; ontape -v -s -L 0 -t STDIO | /bin/gzip ; exit ${PIPESTATUS[0]} > /backup/ontape_backup.gz")"
我正在通过 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 零作为退出代码。
该问题的几个可能的解决方案是:
- 在 Informix onconfig 文件中使用 BACKUP_FILTER
不要将 ontape 的输出通过管道传输到 gzip;而是使用这样的东西:
"(rc, op) = commands.getstatusoutput("source /source ; ontape -v -s -L 0 -t STDIO | /bin/gzip ; exit ${PIPESTATUS[0]} > /backup/ontape_backup.gz")"