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

时间:2013-08-24 17:42:31

标签: c# visual-studio-2010 python-2.7

我已经成功调用了一个python脚本来自我在用c#编写的Windows窗体应用程序中的按钮,其代码如下:

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异常未处理 - 系统无法找到指定的文件”

我也试过这个无济于事 - How do I run a Python script from C#?

2 个答案:

答案 0 :(得分:3)

您需要使用此处显示的开始信息。 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。

中引用

答案 1 :(得分:2)

为了运行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);