在Qlik Sense加载脚本中执行Python脚本无报错但未生效的求助
我碰到过好几个类似的情况,给你梳理几个最可能的原因和解决办法:
服务账户权限不足
Qlik Sense不管是服务器版还是桌面版,都是用特定的系统账户运行的(比如Windows下的QlikSenseServiceUser,桌面版可能是你的登录账户但权限受限)。你在终端运行脚本时用的是自己的账户,对保存目录有读写权限,但Qlik的服务账户可能没有。试试把文件保存到Qlik默认的工作目录(比如C:\ProgramData\Qlik\Sense\Apps下的对应应用目录),或者手动给目标文件夹添加服务账户的读写权限。Python环境不匹配
别以为加了完整路径就万事大吉了!终端里的Python环境和Qlik调用的可能压根不是同一个。比如你终端用的是Anaconda的Python,但Qlik调用的是系统默认的Python,而这个环境里没装你脚本依赖的库(比如pandas、numpy)。建议在Python脚本开头加两行代码:
import sys print(f"Python路径: {sys.executable}") print(f"依赖路径: {sys.path}")
然后在Qlik加载脚本里把输出重定向到日志文件:
Execute "C:\your\full\python\path.exe" "C:\your\script.py" > C:\temp\qlik_python_log.txt 2>&1;
运行加载脚本后去看日志,对比下和终端里的Python路径、依赖路径是不是一致,不一致的话就换成终端里的那个Python路径,或者给Qlik用的Python环境安装依赖。
- Qlik加载脚本的调用语法错误
检查下你调用Python的Execute命令是不是写错了,比如路径里有空格但没加引号,或者脚本路径写错了。举个正确的例子:
Execute """C:\Program Files\Python39\python.exe""" """D:\QlikScripts\my_python_script.py""";
注意这里用了三重引号,因为路径里有空格,Qlik的加载脚本里需要这样处理。另外,确认你的Python调用没有被放在某个条件判断分支里,导致条件不满足时根本没执行。
错误日志没捕获
Qlik默认不会显示Python脚本的报错信息,所以你根本不知道脚本为啥跑失败。一定要把Python的标准输出和错误都重定向到日志文件,就像我上面说的那样,日志里大概率会有线索——比如找不到某个模块、权限被拒绝、文件路径不存在等等。OverrideScriptSecurity设置未生效
虽然你加了OverrideScriptSecurity=1,但要确认是修改了正确的Settings.ini文件:- 服务器版:
C:\ProgramData\Qlik\Sense\Repository\Settings.ini - 桌面版:
C:\Users\<你的用户名>\AppData\Local\Qlik\Sense\Settings.ini
修改后必须重启Qlik Sense服务(服务器版)或者桌面程序,这个设置才会生效,不然等于白改。
- 服务器版:
内容的提问来源于stack exchange,提问作者Marko Zadravec

