【问题标题】:how to get error messages in stderr for isql command in python如何在python中的isql命令的stderr中获取错误消息
【发布时间】: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


【解决方案1】:

您将需要使用raiseerror 函数来设置错误编号。可以使用sp_addmessage添加自定义错误消息

查看我的answer here 了解更多详细信息,答案链接到 Sybase ASE 15.5 文档。

以下是 ASE 12.5.1 的链接:

raiserror sp_addmessage

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多