【发布时间】:2014-10-27 13:34:27
【问题描述】:
我在 python 中为 sybase 数据库使用 isql 命令,如果数据库查询失败,isql 命令默认返回零作为返回码,如果查询失败,我希望它返回一些非零值,这样我就可以知道我的查询无效。
我在互联网上查看了它,我发现将 --retserverror 选项与 isql 一起使用可以解决问题,但我在使用它时遇到了一些错误
我正在使用以下 python 代码:-
ps = subprocess.Popen("""./isql -S %s -U %s -P %s -D %s --retserverror -s "|" -w 10000 <<EOF
%s
go
EOF""" % (server,userid,password,database,Query),stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
error = ps.stderr.read()
out, err = ps.communicate()
if ps.returncode == 0:
final = out
else:
print "Error"
final = error
print final
输出:-
Syntax Error in '--retserverror'.
usage: ./isql [-b] [-e] [-F] [-p] [-n] [-v] [-X] [-Y] [-Q]
[-a display_charset] [-A packet_size] [-c cmdend] [-D database]
[-E editor [-h header [-H hostname [-i inputfile]
[-I interfaces_file] [-J client_charset] [-K keytab_file]
[-l login_timeout] [-m errorlevel] [-M labelname labelvalue]
[-o outputfile] [-P password] [-R remote_server_principal]
[-s col_separator] [-S server_name] [-t timeout] [-U username]
[-V [security_options]] [-w column_width] [-z localename]
[-Z security_mechanism]
有人可以在这里指导我吗?
【问题讨论】:
-
您使用的是哪个数据库?
-
--retservererror 仅在 Sybase 15 ESD#10 及更高版本中可用。您正在运行什么版本的 Sybase?你能在“isql -v”命令中加入吗?
-
Sybase CTISQL Utility/12.5.1/P-EBF12368 ESD #7/DRV.12.5.1.3/Linux Intel/Linux 2.4.18-18.7.xsmp i686/BUILD1251-040/OPT/Mon 一月24 20:01:17 2005
-
您正在检查的返回状态是 isql 命令,而不是失败的查询。我通过将输出 (-o) 重定向到输出文件并检查文件中的错误文本来做到这一点。
标签: python subprocess sybase sap-ase isql