从c#运行Python . py脚本

本文关键字:py 脚本 Python 运行 | 更新日期: 2023-09-27 18:16:44

我有这个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服务器。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模块。

任何建议都会很有帮助,但如果你能告诉我怎么做,那就更有帮助了。

从c#运行Python . py脚本

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