0

首先,这是一个重复(有点):在 C# 上运行 python 脚本不起作用

我的 python 脚本可以从命令行正确运行,但是当我从控制台应用程序运行它时,它不能正确运行。

我的 python 脚本假设从一个目录中获取所有 .log 文件并将它们传递到一个 csv 文件中。然后我想从我的 C# 控制台应用程序访问 csv 文件。在我运行 python 脚本时,它会创建文件然后退出。没有做任何事情过去。

这是我用来尝试和运行 python 脚本的代码。(我不是也不想使用 IronPython)。

    public void runPythonScript()
    {
        ProcessStartInfo startInfo = new ProcessStartInfo("python");
        startInfo.CreateNoWindow = true;
        startInfo.UseShellExecute = false;
        startInfo.FileName = @"C:\Python27\python.exe";
        startInfo.Arguments = @"C:\Users\bmahnke\Desktop\Python-Files\python3.py";  

        try
        {
            using (Process prog = Process.Start(startInfo))
            {

                prog.WaitForExit();
            }
        }
        catch(Exception e)
        {
            Console.WriteLine(e.Message);
        }

    }
4

1 回答 1

0

你没有给我们太多的继续。以下是从另一个程序运行 Python 脚本与从控制台运行它时可能会得到不同行为的一系列原因:

不同的环境

进程通常在创建时继承其所有父级环境变量的副本,除非父级特别设置不同的东西。Python 进程从控制台 shell 进程继承的环境变量可能与从 C# 程序继承的环境变量不同,C# 程序继承自启动它的任何程序。要检查的重要变量是 PATH(工作目录)、PYTHONPATH、PYTHONHOME、PYTHONUNBUFFERED 以及您的脚本专门读取的任何内容。

重定向标准输入、标准输出、标准错误

标准文件描述符的行为可能会有所不同,具体取决于它们是连接到控制台、文件还是通过管道连接到另一个进程。

控制台的存在

可以在不连接控制台的情况下以编程方式启动进程。如果您的子进程根本没有控制台并且您没有重定向它的标准文件描述符,那么它在尝试读取或写入它们时可能会崩溃。

编辑 -我刚刚通过创建一个 win32 C# 程序来调用基于控制台的 Python 脚本并无法重现崩溃 - Python 的控制台输出只是消失在以太中。我想我记得以前遇到过这个问题,但我不确定哪些因素的组合可能会导致问题。这可能值得调查,但我不能确定它是否会给你带来麻烦。

于 2013-02-20T15:29:53.670 回答