我在尝试从 postgres 9.2 数据库中的触发器生成的 python 程序运行外部程序时遇到问题。触发器起作用。它写入文件。我曾尝试只运行外部程序,但权限不允许它运行。我能够创建一个文件夹(使用 os.system(“mkdir”) )。该文件夹的所有者是 NETWORK SERVICE。
我需要运行一个名为 sdktest 的程序。当我尝试运行它时,没有响应发生,所以我认为这意味着 python 程序没有足够的权限(具有 NETWORK SERVICE 的所有者)来运行它。
我一直在让我的程序将它需要的文件复制到该目录中,以便它们具有正确的权限,并且在某种程度上可以工作,但是我需要运行的程序是最后一个程序,它没有运行,因为它没有足够的权限。
我的 python 程序运行一个名为 PG_QB_Connector 的 C++ 程序,它调用 sdktest。
有什么办法可以将流程的所有者更改为“正常”所有者?有一个更好的方法吗?基本上我只需要让这个 C++ 程序有足够的权限才能正确运行。
顺便说一句,当我手动运行 C++ 程序时,运行 sdktest 程序的行运行正确,但是,当我从 postgres/python 运行它时,它什么也没做......
我有 Windows 7,python 3.2。我问的其他 2 个问题位于 此处 和 此处
蟒蛇程序:
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 os
os.system('"mkdir C:\\TEMPWITHOWNER"')
os.system('"mkdir C:\\TEMPWITHOWNER\\addcustomer"')
os.system('"copy C:\\JUNK\\junk.txt C:\\TEMPWITHOWNER\\addcustomer"')
os.system('"copy C:\\BATfiles\\junk6.txt C:\\TEMPWITHOWNER\\addcustomer"')
os.system('"copy C:\\BATfiles\\run_addcust.bat C:\\TEMPWITHOWNER\\addcustomer"')
os.system('"copy C:\\Workfiles\\PG_QB_Connector.exe C:\\TEMPWITHOWNER\\addcustomer"')
os.system('"copy C:\\Workfiles\\sdktest.exe C:\\TEMPWITHOWNER\\addcustomer"')
import subprocess
return_code = subprocess.call(["C:\\TEMPWITHOWNER\\addcustomer\\PG_QB_Connector.exe", '"hello"'])
$$ LANGUAGE plpython3u;
从python程序调用并调用sdktest.exe的C++程序如下
command = "copy C:\\Workfiles\\AddCustomerFROMWEB.xml C:\\TEMPWITHOWNER\\addcustomer\\AddCustomerFROMWEB.xml";
system(command.c_str());
//everything except for the qb file is in my local folder
command = "C:\\TEMPWITHOWNER\\addcustomer\\sdktest.exe \"C:\\Users\\Public\\Documents\\Intuit\\QuickBooks\\Company Files\\Shain Software.qbw\" C:\\TEMPWITHOWNER\\addcustomer\\AddCustomerFROMWEB.xml C:\\TEMPWITHOWNER\\addcustomer\\outputfromsdktestofaddcust.xml";
system(command.c_str());