从C#运行Python .PY脚本

我有这个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。

任何建议都会有所帮助,但如果你能告诉我如何更有帮助呢?

您是否尝试使用脚本作为参数执行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();