来自C#控制台应用程序的Python脚本

时间:2013-02-20 14:31:46

标签: c# python console-application

首先,这是一些(有些):Running a python script on C# not working

我的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);
        }

    }

1 个答案:

答案 0 :(得分:0)

你没有给我们太多的帮助。以下是一些原因,当您从另一个程序运行Python脚本时,您可能会遇到与从控制台运行Python脚本时不同的行为:

不同的环境

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

重定向stdin,stdout,stderr

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

控制台的存在

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

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

相关问题