2016-03-21 78 views
0

我正在制作一个迷你Python IDE以获得乐趣。为什么不。所以我想能够从C#调用python脚本,现在我只是测试一个简单的场景。我知道这不是专业IDE可能的工作方式。试图在C中调用Python脚本#

private void Run_Click(object sender, EventArgs e) 
    { 
     run_cmd("C:/Python34/python.exe", "C:/Users/Alaseel/Desktop/test.py"); 
    } 

    private void About_Click(object sender, EventArgs e) 
    { 
     // Open the about documentation 
    } 

    private void run_cmd(string cmd, string args) 
    { 
     ProcessStartInfo start = new ProcessStartInfo(); 
     start.FileName = "C:/Python34/python.exe"; 
     start.Arguments = string.Format("{0} {1}", cmd, args); 
     start.UseShellExecute = false; 
     start.RedirectStandardOutput = true; 
     using (Process process = Process.Start(start)) 
     { 
      using (StreamReader reader = process.StandardOutput) 
      { 
       string result = reader.ReadToEnd(); 
       Console.Write(result); 
      } 
     } 
    } 

每当我点击Windows窗体应用程序上的“运行”按钮,它会短暂运行python.exe,然后关闭。它实际上并没有运行我传入的文件。我做错了什么?

PS:run_cmd方法不是我的。我之前在一个线程中查找过这个问题,并使用了他们的代码。但我认为我使用的方法错了。

任何想法?谢谢!

回答

2

在这种情况下,您实际上会放置两倍的python.exe路径。你把它当作cmdstart.Filename

你的命令行看起来像:"C:/Python34/python.exe" "C:/Python34/python.exe" "C:/Users/Alaseel/Desktop/test.py"

这可能是一个无效的命令。

+0

感谢您的帮助!我将如何重构方法签名或方法调用? – katie1245

+0

有不同的方法来做到这一点。我可能会做这样的事情:start.FileName = cmd。然后,您不会将cmd传递给参数,因为它不是您正在调用的程序的参数,而是程序本身!所以,start.Arguments = args。这应该工作! (我没有测试) – HammerHeart