如何将c#变量从windows窗体应用程序传递到python脚本

本文关键字:应用程序 脚本 python 窗体 windows 变量 | 更新日期: 2023-09-27 18:28:50

我已经成功地通过用c#编写的windows窗体应用程序中的按钮点击调用了一个python脚本,代码如下:

private void login_Click(object sender, EventArgs e)
    {
        System.Diagnostics.Process.Start("C:''Python27''Scripts''path''file.py");
    }

现在我想将一个变量传递给python脚本。我试着把它作为一个论点来传递,但没有用(在php中这样工作):

    private void login_Click(object sender, EventArgs e)
    {
        System.Diagnostics.Process.Start("C:''Python27''Scripts''path''file.py myVariable");
    }

我在visual studio编译器中没有收到此代码的错误,但当我单击按钮启动python脚本时,我收到一个错误,上面写着"Win32异常未处理-系统找不到指定的文件"

我也尝试过,但没有成功——我如何从C#运行Python脚本?

如何将c#变量从windows窗体应用程序传递到python脚本

您需要使用此处所示的启动信息。http://www.dotnetperls.com/process-start

ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.FileName = "C:''Python27''Scripts''path''file.py";
startInfo.Arguments = "myvariable";
try 
{
    using (Process exeProcess = Process.Start(startInfo))
    {
         //dostuff
         exeProcess.WaitForExit();
    }
}
catch
{
    //log
    throw;
}

process.start返回的进程是非托管的,应该在using内部引用。

为了运行python脚本,您需要将脚本路径传递给python解释器。现在您要求Windows执行python脚本文件。这不是一个可执行文件,因此windows将无法启动它。

此外,您调用start的方式会使windows尝试启动文件"file.py myVariable"。相反,您希望它运行"file.py"并将"myVariable"作为参数传递。尝试以下代码而不是

Process.Start(
  @"c:'path'to'python.exe",
  @"C:'Python27'Scripts'path'file.py myVariable");

编辑

从您的注释中可以看出,您希望传递变量myVariable的当前值,而不是文本。如果是,请尝试以下

string arg = string.Format(@"C:'Python27'Scripts'path'file.py {0}", myVariable);
Process.Start(
  @"c:'path'to'python.exe",
  arg);