在c#中运行Python脚本不起任何作用

2024-09-19 15:55:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下python代码,它查询数据库中的一些值,并继续使用matplotlib将它们绘制成图形

import sys
import pyodbc
import os
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt


if len(sys.argv) == 2:
    server = 'LOCAL'
    database = 'basic_db'
    try:
        conexion = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+server+';DATABASE='+database+';Trusted_Connection=yes;')
        cursor = conexion.cursor()
                        
    except Exception as e:
        print("Error SQL Server: ",e)
    
    card = sys.argv[1]
    my_dpi= 96

    consulta = "SELECT qt_x from tb_value WHERE cd_card = "+str(card)+";"
    cursor.execute(consulta)
    img_x = cursor.fetchall()

    consulta = "SELECT qt_y from tb_value WHERE cd_card = "+str(card)+";"
    cursor.execute(consulta)
    img_y = cursor.fetchall()

    consulta = "SELECT max(qt_y) from tb_value WHERE cd_card = "+str(card)+";"
    cursor.execute(consulta)
    maxy = float(cursor.fetchval())
    y_tope = maxy + 1

    fig, catc = plt.subplots(figsize=(96/my_dpi,96/my_dpi))
    catc.plot(img_x,img_y, "black")

    catc.set_axis_off()
    limx= catc.get_xlim()
    limy= catc.get_ylim()
    catc.set_ylim((y_tope/2)*-1,y_tope)

    catc= plt.gcf()

    figname = 'cdg_{}.jpg'.format(card)
    path = r"C:\Users\basic user\Desktop\BSC\BasicProg\BasicProg\bin\Debug\cards"
    dest = os.path.join(path, figname)
    catc.savefig(dest, dpi=96)
    
else:
    print("Error - Introduce los argumentos correctamente")
    print("Ejemplo: graphbasiccard.py Carta ")

如果我在cmd中使用:python graphbasiccard.py 1运行代码,它将非常有效。我在这个环境中使用了python 3.8.3

问题是,当试图通过从C#函数调用脚本来运行脚本时,程序不会返回错误,但它只是不执行任何操作。我正在使用以下代码拨打电话:

System.Diagnostics.Process process = new System.Diagnostics.Process();
            System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
            startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
            startInfo.FileName = "cmd.exe";
            startInfo.Arguments = "/c \"python "+ @"C:\Users\Basic User\Desktop\Basic\BasicPRogram\BasicPRogram\bin\Debug\" + "graphbasiccard.py "+ cd_card;
            MessageBox.Show(startInfo.Arguments.ToString());
            process.StartInfo = startInfo;
            process.Start();

我还尝试使用以下命令直接调用python.exe:

System.Diagnostics.Process process = new System.Diagnostics.Process();
            System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
            startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
            startInfo.FileName = @"C:\Users\Anthony Godoy\AppData\Local\Programs\Python\Python38\python.exe";
            startInfo.Arguments = @"C:\Users\Basic User\Desktop\Basic\BasicPRogram\BasicPRogram\bin\Debug\graphbasiccard.py " + cd_card;
            process.StartInfo = startInfo;
            process.Start();

但我没办法让它工作。有什么建议吗


Tags: importimgascdcardprocesssystemusers
1条回答
网友
1楼 · 发布于 2024-09-19 15:55:41

我设法把它修好了。我遇到的问题是,它给出了一条远离原点的路径,我用以下方法更正了它:

ProcessStartInfo start = new ProcessStartInfo();
            start.FileName = @"C:\Users\Basic User\AppData\Local\Programs\Python\Python38\python.exe";
            start.Arguments = @"graphbasiccard.py " + cd_card;
            start.UseShellExecute = false;
            start.RedirectStandardOutput = true;
            using (Process process = Process.Start(start))
            {
                using (StreamReader reader = process.StandardOutput)
                {
                    string result = reader.ReadToEnd();
                    Console.Write(result);
                }
            }

相关问题 更多 >