【发布时间】:2013-01-17 02:51:26
【问题描述】:
我在运行 python 程序(真的是 plpython3u)作为 postgres (9.2) 的触发器时遇到问题。触发器使用以下语句调用 python 程序: 执行 scalesmyone(new.id);
python 程序成功地将某些内容写入文件(这向我表明触发器正在工作),然后尝试在我的 Windows 7 机器上的 C: 驱动器上运行程序。它失败并出现以下错误:错误:WindowsError:[错误5]访问被拒绝。我现在正在使用子进程调用,但之前我尝试过子进程调用,但没有奏效。可以看到here
代码如下:
CREATE or replace FUNCTION scalesmyone (thename text)
RETURNS int
AS $$
a=5
f = open('C:\\JUNK\\frompython.txt','w')
f.write(thename)
f.close()
import subprocess
return_code = subprocess.call(["C:\\Users\\Jim\\Desktop\\BATfiles\\run_addcust.bat", '"hello"'])
$$ LANGUAGE plpython3u;
文件在那里。
吉姆
【问题讨论】:
-
你有追溯吗?如果你这样做,请发布它。是
f =行还是return_code =行的错误? -
触发器在程序被触发的目录中是否有执行权限?或者触发器是否有可能同时触发,所以第二次运行尝试写入同一个文件,而第一次运行仍在使用该文件?
-
@Thomas This is running the exe.It's the same error
codeCONTEXT: Traceback (most recent call last): PL/Python function "scalesmyone", line 7, inreturn_code = subprocess.call(['"C:\\Users\\Jim\\Documents\\Visual Studio 2008\\Projects\\addcustomer\\Debug\\AddNewCustomer.exe"', '"hello"']) PL/Python函数“scalesmyone”,第 470 行,调用 PL/Python 函数“scalesmyone”,第 744 行,init PL/Python 函数“scalesmyone”,第 963 行,_execute_child PL/Python 函数“scalesmyone”下一条评论中的最后两行 -
@Jim 使用堆栈跟踪编辑您的问题
-
@Thomas 直接运行 exe 的最后两行回溯: SQL 语句 "SELECT scalesmyone(new.id)" PL/pgSQL function scalesins_function() line 13 at PERFORM
标签: python postgresql