Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从C运行Python.PY脚本#_C#_Python 3.x - Fatal编程技术网

C# 从C运行Python.PY脚本#

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

我有这个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#代码:

我知道这可能很简单,但我似乎找不到我需要做什么

另外,我很想在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();