Python调用带有重定向命令的可执行程序程序后异常信息丢失
Python调用带有重定向命令的可执行程序程序后错误信息丢失
如:
ret=os.system("mysqldump -uxx -pxx -S /tmp/mysql.sock test2 |gzip2 >test2.sql.gz2")
print ret
如果test2这个数据库不存在,那么mysqldump会失败,但是重定向到gzip2之后,最后的结果却是0
,那么通过判断ret值来看命令是否执行成功就会有问题了,
请问这种问题如何解决?
单独执行:
ret=os.system("mysqldump -uxx -pxx -S /tmp/mysql.sock test2 >test2.sql")
print ret
在test2不存在的情况下,会返回512
------解决方案--------------------
bash支持pipefail选项。例子:
你可以把你要执行的命令放到一个bash脚本中,用os.system执行该脚本。如果需要动态生成需要执行的命令,可以用subprocess模块的call函数,call函数有一个executable选项,可以指定要用的shell(例如'/bin/bash')。
如:
ret=os.system("mysqldump -uxx -pxx -S /tmp/mysql.sock test2 |gzip2 >test2.sql.gz2")
print ret
如果test2这个数据库不存在,那么mysqldump会失败,但是重定向到gzip2之后,最后的结果却是0
,那么通过判断ret值来看命令是否执行成功就会有问题了,
请问这种问题如何解决?
单独执行:
ret=os.system("mysqldump -uxx -pxx -S /tmp/mysql.sock test2 >test2.sql")
print ret
在test2不存在的情况下,会返回512
------解决方案--------------------
bash支持pipefail选项。例子:
/tmp/ cat xx
------解决方案--------------------
gzip > t.gz
cat: xx: No such file or directory
/tmp/ echo $? # 不会返回cat的error code
0
/tmp/ set -o pipefail
/tmp/ cat xx
------解决方案--------------------
gzip > t.gz
cat: xx: No such file or directory
/tmp/ echo $? # 返回cat的error code
1
你可以把你要执行的命令放到一个bash脚本中,用os.system执行该脚本。如果需要动态生成需要执行的命令,可以用subprocess模块的call函数,call函数有一个executable选项,可以指定要用的shell(例如'/bin/bash')。