python
  • linux
  • execute
  • pymssql
  • 2016-06-14 32 views 1 likes 
    1

    我试着检索运行标准输出pymssql可变

    import pymssql 
    conn = pymssql.connect(server='IP', user='domain\user', password='PSWD', tds_version='8.0') 
    cursor = conn.cursor() 
    cursor.execute("EXEC msdb.dbo.sp_start_job @job_name = 'jobname'") 
    

    结果表单时,它的任务添加到提示来处理它不会返回任何东西,但是当作业未拼命地跑,将返回这样的东西在进行测试的情况下

    Traceback (most recent call last): 
        File "shared/python3", line 85, in <module> 
        cursor.execute("EXEC msdb.dbo.sp_start_job @job_name = ''") 
        File "pymssql.pyx", line 467, in pymssql.Cursor.execute (pymssql.c:7533) 
    pymssql.OperationalError: (14262, "The specified @job_name ('') does not exist.DB-Lib error message 14262, severity 16:\nGeneral SQL Server error: Check messages from the SQL Server\n") 
    

    在这种情况下,错误指出Job_name不存在。我想要做的就是把结果上,我可以收杆进行差错控制...

    我已经试过这样的字符串变量是什么:

    import sys 
    
    # Store the reference, in case you want to show things again in standard output 
    old_stdout = sys.stdout 
    
    # This variable will store everything that is sent to the standard output 
    result = StringIO() 
    sys.stdout = result 
    
    # Here we can call anything we like, like external modules, and everything that they will send to standard output will be stored on "result" 
    cursor.execute("EXEC msdb.dbo.sp_start_job @job_name = 'jobname'") 
    
    # Redirect again the std output to screen 
    sys.stdout = old_stdout 
    
    # Then, get the stdout like a string and process it! 
    result_string = result.getvalue() 
    process_string(result_string) 
    

    link。但无法让它工作。

    +0

    尝试sys.stderr而不是sys.stdout – peterdemin

    +0

    @peterdemin我试过没有成功,像这样...'old_stdout = sys.stderr result = StringIO()sys.stderr = result cursor.execute(“EXEC msdb。 dbo.sp_start_job @job_name ='jobname'“)sys.stderr = old_stdout result_string = result.getvalue()print result_string' – maco1717

    回答

    2

    您正在看到回溯,因为您没有处理在作业名称不存在时发生的异常。如果您想捕获错误消息,则可以简单地捕获该异常。作为一个通用的例子,而不是仅仅做

    crsr.execute(sql) 
    

    你可以做

    try: 
        crsr.execute(sql) 
    except Exception as e: 
        (error_code, error_message) = e 
    

    ,然后使用error_codeerror_message值,并写入到一个日志文件,或将它们吐出到控制台,或其他。

    +0

    BOOM!工作非常感谢你。我已经阅读了关于异常,但没有,并且仍然不知道它做了什么,现在我知道和应用寿。 – maco1717

    相关问题