簡體   English   中英

從C#運行Python .PY腳本

[英]Run Python .PY script from C#

我有這個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。

任何建議都會有所幫助,但如果您可以告訴我如何做,也會更有幫助。

您是否嘗試使用腳本作為參數執行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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM