我有这个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()
Run Code Online (Sandbox Code Playgroud)
它将被另存为文件夹中名为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);
}
Run Code Online (Sandbox Code Playgroud)
我知道这可能确实很简单,但是我似乎找不到我需要做的事情。
另外,我很想在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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9810 次 |
| 最近记录: |