0

我有一个应用程序,我试图从 ac# 应用程序运行 python。我曾尝试创建 python 运行时环境并运行代码,但由于我的 python 代码正在从另一个 python 文件导入一些模块,它会引发异常(导入异常)。我尝试了以下代码:

var ipy = Python.CreateRuntime();
                dynamic test = ipy.UseFile(@"file path");
                test.Simple();
                Console.Read();

我有另一个想法是通过 cmd 提示符运行它,但我不知道该怎么做。我想打开 cmd.exe 并执行 python 文件,我希望用户在 c# 应用程序中输入文件名,然后单击运行按钮,代码通过 cmd.exe 执行,输出再次显示在 c# 应用程序中。也欢迎任何其他建议。

4

3 回答 3

1

这样就可以完成工作:以下示例运行 cmd 运行 TCL 脚本(我已经安装在我的计算机上)你只需要替换命令来运行 Python 并添加你的脚本文件。注意脚本文件名后面的“& exit” - 这会使 cmd 在脚本退出后退出。

string fileName = "C:\\Tcl\\example\\hello.tcl";
        Process p = new Process();
        p.StartInfo = new ProcessStartInfo("cmd", "/K tclsh " + fileName + " & exit")
        {
            RedirectStandardOutput = true,
            UseShellExecute = false,
            CreateNoWindow = true
        };
        p.Start();

        string output = p.StandardOutput.ReadToEnd();
        p.WaitForExit();

        Console.WriteLine(output);

        Console.ReadLine();

[更新]

在 Python 安装和测试之后,这将是使用 cmd 运行 python 脚本的代码:

 string fileName = @"C:\Python27\example\hello_world.py";

        Process p = new Process();
        p.StartInfo = new ProcessStartInfo("cmd", "/K " + fileName + " & exit")
        {
            RedirectStandardOutput = true,
            UseShellExecute = false,
            CreateNoWindow = true
        };
        p.Start();

        string output = p.StandardOutput.ReadToEnd();
        p.WaitForExit();

        Console.WriteLine(output);

        Console.ReadLine();

你也可以在没有 CMD 过程的情况下做同样的事情:

string fileName = @"C:\Python27\example\hello_world.py";

        Process p = new Process();
        p.StartInfo = new ProcessStartInfo(@"C:\Python27\python.exe",  fileName )
        {
            RedirectStandardOutput = true,
            UseShellExecute = false,
            CreateNoWindow = true
        };
        p.Start();

        string output = p.StandardOutput.ReadToEnd();
        p.WaitForExit();

        Console.WriteLine(output);

        Console.ReadLine();
于 2013-09-30T07:00:06.137 回答
0

我目前无法亲自测试它,但我发现有些人Python.CreateEngine()在他们的代码中使用,例如:

Microsoft.Scripting.Hosting.ScriptEngine engine = 
    IronPython.Hosting.Python.CreateEngine();

这条线取自这个 SO question

您还可以使用 python 代码通过示例类查看本文。它还使用Python.CreateEngine().

于 2013-09-30T06:23:31.137 回答
0

我已经尝试了以下代码,它似乎解决了我的问题:

Process p = new Process();
            string cmd = @"python filepath & exit";
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.FileName = "cmd.exe";
            p.StartInfo.RedirectStandardInput = true;
            p.Start();
            StreamWriter myStreamWriter = p.StandardInput;
            myStreamWriter.WriteLine(cmd.ToString());
            myStreamWriter.Close();
            string output = p.StandardOutput.ReadToEnd();
            p.WaitForExit();
            Console.ReadLine();
于 2013-10-01T06:04:55.717 回答