执行进程任务中的Python

fcg9iug3  于 2023-02-10  发布在  Python
关注(0)|答案(1)|浏览(151)

我已经编写了一个python代码,然后在Execute Process Task中通过SSIS运行它,因为我想使用表刷新依赖关系来调度它(这通过Windows调度程序或Alteryx是不可能的)。
代码通过Google API(pip install googletrans == 4. 0. 0-rc1)读写SQL管理工作室进行翻译,没有输出或通过SSIS输入,输入和输出通过Python中的sqlacademy完成。
这些代码在Jupyter notebook中运行得非常好,我将其保存为. py文件,但是在SSIS中的执行进程任务中遇到了很多错误。
以下是我尝试过的几种解决方案:
1.在EXCUTABLE中(在Python复制. exe路径的命令提示符中编写)
在参数C:......\文件. py中
在WorkingDirectory C:......\中(仅删除文件名,同时保留反斜杠
无空白区域stackflow的解决方案)
错误:
"C:\用户\我\下载\文件夹\测试"中的"C:\用户\我\应用数据\本地\程序\Python\Python311\python.exe""www.example.com",进程退出代码为"1",而预期代码为"0"。UC2.py" at "C:\Users\me\Downloads\folder\test", The process exit code was "1" while the expected was "0".
1.在EXCUTABLE中(在Python复制. exe路径的命令提示符中编写)
在参数'file.py'中(文件名在stackflow的解决方案中的四元数中)
在WorkingDirectory C:......\中(仅删除文件名,同时保留反斜杠
无空白区域stackflow的解决方案)
错误:
进程退出代码为"2",而预期代码为"0"
1.移动这. exe到一个文件夹是没有其他文件存在.
进程退出代码为"-1073741515",而预期代码为"0"
我也尝试过打开一个新项目。
然后我尝试右键单击更改成功值在SSIS中运行时没有错误,但弹出以下错误:
enter image description here
所有东西甚至SQL服务器都安装在远程桌面上。

ryevplcw

ryevplcw1#

www.example.comHelloWorld.err.py

这是一个普通的python脚本,它将一个字符串写入标准输出,另一个写入标准错误,退出返回代码为1。

import sys
print("Hello world")
print("Egads, something bad happened!", file=sys.stderr)
exit(1)

SSIS软件包

SSIS包示例如下所示。执行进程任务具有脚本任务的后续任务。

双击优先约束(两者之间的线),并将其从默认值Success更改为Completion

EPT Python语言
按如下所示配置的执行包任务

  • 可执行文件:C:\程序文件\Python39\python.exe
  • 参数:C:\系统数据\系统代码
  • 标准输出变量:用户:标准输出
  • 标准误差变量e:用户::标准错误

SCR回声返回

这是一个通用的脚本任务,我使用并滥用它来将SSIS变量的值转储到输出日志/结果选项卡。它简单、轻量级,让您无需弹出窗口或任何艰苦的工作就可以打印值。
您所需要做的就是在readonly/readWrite集合中添加Variable。

using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;

namespace ST_ede4b38a087c4724a71149ffc5ed6be9
{
    [Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute]
    public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
    {
        public void Main()
        {
            bool fireAgain = false;
            foreach (Variable item in Dts.Variables)
            {
                Dts.Events.FireInformation(0, "SCR Echo Back", string.Format("{0}->{1}", item.QualifiedName, item.Value), "", 0, ref fireAgain);
            }

            Dts.TaskResult = (int)ScriptResults.Success;
        }

        enum ScriptResults
        {
            Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
            Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
        };
    }
}

结果

当我的包运行时,正如"预期"的那样,如果我使用python脚本中的exit(1),则运行的SuccessValue将为1。
让我们看看"Output"选项卡的外观

SSIS package "C:\Users\bfellows\source\repos\SO_Trash\SO_Trash\SO_75361110.dtsx" starting.
Error: 0xC0029151 at EPT Python the thing, Execute Process Task: In Executing "C:\Program Files\Python39\python.exe" "C:\ssisdata\SO_75361110.err.py" at "", The process exit code was "1" while the expected was "0".
Task failed: EPT Python the thing
Warning: 0x80019002 at SEQC Do the thing: SSIS Warning Code DTS_W_MAXIMUMERRORCOUNTREACHED.  The Execution method succeeded, but the number of errors raised (1) reached the maximum allowed (1); resulting in failure. This occurs when the number of errors reaches the number specified in MaximumErrorCount. Change the MaximumErrorCount or fix the errors.
Information: 0x0 at SCR Echo Back, SCR Echo Back: User::StdErr->Egads, something bad happened!
Information: 0x0 at SCR Echo Back, SCR Echo Back: User::StdOut->Hello world
Warning: 0x80019002 at SO_75361110: SSIS Warning Code DTS_W_MAXIMUMERRORCOUNTREACHED.  The Execution method succeeded, but the number of errors raised (1) reached the maximum allowed (1); resulting in failure. This occurs when the number of errors reaches the number specified in MaximumErrorCount. Change the MaximumErrorCount or fix the errors.
SSIS package "C:\Users\bfellows\source\repos\SO_Trash\SO_Trash\SO_75361110.dtsx" finished: Failure.
The program '[68044] DtsDebugHost.exe: DTS' has exited with code 0 (0x0).

值得注意的是,这两行
资料:SCR回波返回时为0x0,SCR回波返回:User::StdErr-〉Egads,不好的事情发生了!
资料:SCR回波返回时为0x0,SCR回波返回:用户::Hello world
这是我们的脚本任务回显标准输出和标准错误文本流的值。我的怀疑是,假定"正常"运行为10分钟,SSIS的运行以秒为单位,则流程执行会向调用方抛出错误,但没有人侦听。这将添加侦听器,并为您提供更好的信息来诊断根本原因。

相关问题