C# 从C运行Python.PY脚本#
我有这个python代码C# 从C运行Python.PY脚本#,c#,python-3.x,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
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#代码:
我知道这可能很简单,但我似乎找不到我需要做什么
另外,我很想在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();
我试过了,但是它运行在整个程序中,没有异常,但是继续运行,python代码似乎没有运行。你没有向控制台抛出异常或智慧吗?顺便说一下,把代码放在你的try-catch中。所以我修改了代码,现在它正在“打开”py文件,并且肯定在等待它退出,但实际上什么都没有发生。将立即将新代码添加到我的文件中。请尝试将shellexecute设置为true,或者暂时将python扩展名改为.py而不是.pyw。这样你就可以看到一些输出。嗯,事实上,鸡蛋在我脸上。如果在从python中提取数据之前而不是之后清除要插入的表中的所有数据,这将有助于将来的参考。漫长的一天我能说些什么。
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();