我一直有問題,試圖從一個從postgres 9.2數據庫中的觸發器生成的python程序運行一個外部程序。觸發器起作用。它寫入文件。我曾嘗試過只運行外部程序,但權限不允許它運行。我能夠創建一個文件夾(使用os.system(「mkdir」))。該文件夾的所有者是NETWORK SERVICE。Python不調用外部程序部分3
我需要運行一個名爲sdktest的程序。當我嘗試運行它時,沒有響應發生,所以我認爲這意味着python程序沒有足夠的權限(使用NETWORK SERVICE的所有者)來運行它。
我一直有我的程序複製文件,它需要進入該目錄,所以他們將有正確的權限,並已在一定程度上工作,但我需要運行的程序是最後一個,它不運行,因爲它沒有足夠的權限。
我的python程序運行一個名爲PG_QB_Connector的C++程序,它調用sdktest。
有沒有什麼辦法可以將進程的擁有者更改爲「普通」擁有者?有一個更好的方法嗎?基本上我只需要讓這個C++程序有足夠的perms來正確運行。
BTW,當我用手運行C++程序,運行該程序sdktest線運行正常,然而,當我從Postgres的/蟒蛇它沒有做任何事情,運行它...
我有Windows 7,Python 3.2。我問這個的其他兩個問題分別位於here和here
Python程序:
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低於
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());
的C++程序
我是否正確理解PostgreSQL觸發器正在生成一個Python程序並將其寫入一個文件,然後您想從C++程序中調用該文件?這種設計看起來非常奇怪,我懷疑,而不是做目前的設計工作,可能需要改變方法。你知道PL/Python嗎?您是否考慮過在您的C++程序中嵌入Python解釋器,通過libpq連接從Pg獲取程序文本並在嵌入式Python解釋器中執行它? – 2013-03-10 02:03:40
@CraigRinger,不,那不是我想要做的。在最基本的形式中,我希望來自postgres的觸發器能夠運行我創建的名爲PG_QB_Connector的C++程序。該程序將執行一些處理並調用sdktest。我甚至不關心python作爲postgres的一部分。我只需要一些方法讓postgres觸發器運行程序。至於你的建議,我不認爲你的libq連接會有幫助,是嗎?我是否正確地認爲我需要一個來自PG的連接,而不是進入? – Jim 2013-03-10 03:48:28
是的,你正在嘗試做一些與我以前不同的事情。現在添加答案。 – 2013-03-10 07:20:20