我有这个python代码。
import pyodbc
import time
print("Hello")
plexString = "{call sproc164407_2053096_651466 ()}"
connectionPlex = pyodbc.connect('DSN=PlexReport32; UID=XXXX; PWD=XXX', autocommit = True)
cursorPlex = connectionPlex.cursor()
connectionLocal = pyodbc.connect("DRIVER={SQL Server}; SERVER=XXX; DATABASE=Plex; Trusted_Connection=yes; connection timeout=30")
cursorLocal = connectionLocal.cursor()
cursorPlex.execute(plexString)
rows = cursorPlex.fetchall()
for row in rows:
date1 = row[1].rstrip("0")
date2 = row[2].rstrip("0")
row[1] = date1
row[2] = date2
cursorLocal.execute('INSERT INTO Regraded_Serials VALUES (?,?,?,?,?,?,?,?,?,?,?,?)', row)
cursorLocal.commit()
它被保存为文件夹中名为PlexStoredProcedures.pyw的文件。我使用pyw是因为我读到这会阻止它打开控制台窗口。我使用这个python脚本从远程数据库中提取数据并将其添加到本地sql server。 C#的问题是我无法控制的。
但我似乎无法执行脚本。我不需要添加任何论据,我也不需要它返回任何东西。我只是想让它运行脚本,并让C#在继续之前等待它完成。我在网上看过,但这个简单问题的答案总是很容易理解。这是我迄今为止在C#中所做的最好的。它正在运行,但它没有运行脚本,或者至少,脚本没有抓取和插入数据,如果我手动运行它会执行。
C#代码:
try
{
ProcessStartInfo pythonInfo = new ProcessStartInfo();
Process python;
pythonInfo.FileName = @"C:\Visual Studio Projects\PlexStoredProcedures\PlexStoredProcedures\PlexStoredProcedures.pyw";
//pythonInfo.Arguments = string.Format("{0} {1}", cmd, args);
pythonInfo.CreateNoWindow = false;
pythonInfo.UseShellExecute = true;
Console.WriteLine("Python Starting");
python = Process.Start(pythonInfo);
python.WaitForExit();
python.Close();
Console.WriteLine("Python Exiting");
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
我知道它可能非常简单,但我似乎无法找到我需要做的事情。
另外,我很想在IronPython中运行它,但显然IronPython不会添加模块pyodbc。
任何建议都会有所帮助,但如果你能告诉我如何更有帮助呢?
答案 0 :(得分:4)
您是否尝试过将脚本作为参数执行python.exe?它可能就像脚本本身没有正确执行一样简单。
喜欢这个:
ProcessStartInfo pythonInfo = new ProcessStartInfo();
Process python;
pythonInfo.FileName = @"C:\Python27\python.exe";
pythonInfo.Arguments = @"C:\Visual Studio Projects\PlexStoredProcedures\PlexStoredProcedures\PlexStoredProcedures.pyw";
pythonInfo.CreateNoWindow = false;
pythonInfo.UseShellExecute = true;
Console.WriteLine("Python Starting");
python = Process.Start(pythonInfo);
python.WaitForExit();
python.Close();