2013-04-23 4 views
-1

Мне нужно выяснить, не вызваны ли SQL-запросы Python. До сих пор у меня есть:Получить сообщение об ошибке из SQL-запроса обратно в Python

import subprocess 
p = subprocess.Popen(['sqlcmd', '-E -m-1 -S 1070854A\AISP -i NewStructures.sql >>process.log'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) 
out, err = p.communicate() 
print out 
print err 

Но это не нравится параметрам SQLCMD. Результат:

Sqlcmd: '-E -S 1070854A\AISP -i NewStructures.sql': Unknown Option. Enter '-?' for help. 

Эти параметры работают при вводе их в командную строку.

Спасибо.

+0

Я считаю, что вам нужно предоставить параметры отдельно, например: '-E', '-m', '-1', '-S' и так далее. – SpankMe

+0

Я действительно рядом. Это дает результат запроса, но мне нужно получить только сообщения об ошибках. Я чувствую, что одна маленькая корректировка будет делать это ... импорт подпроцесс импорта DateTime command_process = subprocess.Popen ( [ 'Sqlcmd', '-E', '-V1', '-S', «1070854A \ ПСИУ», '-i', 'NewStructures.sql'], оболочки = True, STDIN = subprocess.PIPE, STDOUT = subprocess.PIPE, STDERR = subprocess.STDOUT, ) command_output = command_process.communicate() [0] print command_output – user2311473

ответ

0

'-E -m-1 -S 1070854A\AISP -i NewStructures.sql >>process.log' интерпретируется как один аргумент, поэтому вы получаете эту ошибку. Для этого необходимо разбить аргументы.

Видел, как вы пытаетесь использовать перенаправление в вашей команде оболочки, вы могли бы использовать что-то вроде этого:

import subprocess 
with open('process.log', 'ab') as logfile: 
    logfile.seek(0, 2) 
    p = subprocess.Popen(['sqlcmd', '-E', '-m-1', '-S', '1070854A\AISP', '-i', 'NewStructures.sql'], stdout=logfile, stderr=subprocess.PIPE) 
    out, err = p.communicate() 

out будет Emty в любом случае, так как стандартный вывод перенаправляется в файл.

Перенаправление с использованием > или >> работает только с shell=True.

+0

Спасибо! Это работает, чтобы начать запрос; но мне также нужно добавить в файл журнала (не перезаписывать, это будет ночной процесс). Также как получить сообщение об ошибке SQL после этого? – user2311473

+0

с использованием '' ab'' filemode при открытии файла, который вы открываете для добавления, а не для перезаписи. Если вы получите сообщение об ошибке, вероятно, оно будет в 'err' (если sqlcmd записывает его в stderr). Если вы хотите больше гибкости, вы можете попытаться напрямую подключиться к db (используя [pymssql] (http://code.google.com/p/pymssql/) или [pyodbc] (https://pypi.python.org/pypi/pyodbc)) – mata

+0

Я сломал запрос и добавил «print err» в конец скрипта, но я получаю пустую строку. Также файл журнала перезаписывается. – user2311473

Смежные вопросы