2

我已经成功地通过单击我用 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 脚本?

4

2 回答 2

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 中引用。

于 2013-08-24T18:12:01.300 回答
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);
于 2013-08-24T18:12:24.950 回答