как получить сообщения об ошибках в stderr для команды isql в python

Я использую команду isql в python для баз данных sybase, команда 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]

Может ли кто-нибудь направить меня сюда?


person Bad_Coder    schedule 03.09.2014    source источник
comment
Какую базу данных вы используете?   -  person Tanuj Mathur    schedule 03.09.2014
comment
--retservererror доступен только в Sybase 15 ESD#10 и выше. Какая версия Sybase у вас установлена? Можете ли вы включить команду 'isql -v'?   -  person Tanuj Mathur    schedule 03.09.2014
comment
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/Пн, 24 января, 20:01:17 2005 г.   -  person Bad_Coder    schedule 03.09.2014
comment
возвращаемый статус, который вы проверяете, относится к команде isql, а не к запросу, который не удался. Я делаю это, перенаправляя вывод (-o) в выходной файл, а затем проверяя текст ошибки в файле.   -  person Meet    schedule 10.09.2014


Ответы (1)


Вы захотите использовать функцию raiseerror для установки номера ошибки. Пользовательские сообщения об ошибках можно добавить с помощью sp_addmessage

Ознакомьтесь с моим ответом здесь для более подробной информации, ответ ссылается на Sybase Документация ASE 15.5.

Вот ссылки для ASE 12.5.1:

raiserror sp_addmessage

person Michael Gardner    schedule 03.09.2014