从C#

时间:2015-10-08 01:00:47

标签: c# python-3.x

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

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

1 个答案:

答案 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();