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

时间:2015-03-26 04:23:54

标签: python informix python-2.6

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

示例:

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

执行上述功能后,返回码rc为0 输出消息op是"Archive failed - ISAM error: An error has occurred during archive back up."

我不明白为什么即使命令失败,Python也会返回0

使用的Python版本是2.6.6

1 个答案:

答案 0 :(得分:0)

问题不在于Python方面。 ontape命令的输出通过管道输出到gzip命令。返回shell的退出代码是gzip命令的返回码。 Gzip命令没有错误输出,即使它没有从ontape命令接收数据并返回零作为退出代码。

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

  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")"