从SQL查询返回到Python的错误消息

时间:2013-04-23 13:39:32

标签: python sql subprocess sqlcmd

我需要能够判断Python启动的SQL查询是否失败。到目前为止,我有:

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.

这些参数在命令行中输入时有效。

感谢。

1 个答案:

答案 0 :(得分:0)

'-E -m-1 -S 1070854A\AISP -i NewStructures.sql >>process.log'被解释为单个参数,这就是您收到此错误的原因。您需要拆分参数才能使其工作。

当您尝试在shell命令中使用重定向时,可以使用以下内容:

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,因为stdout被重定向到文件。

使用>>>的重定向仅适用于shell=True