我需要能够判断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.
这些参数在命令行中输入时有效。
感谢。
答案 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
。