C# 控制台应用中的 Python 脚本

0 投票
1 回答
2418 浏览
提问于 2025-04-17 16:30

首先,这个问题有点像这个:在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);
        }

    }

1 个回答

0

你提供的信息不太多。这里有一些可能导致你在从其他程序运行Python脚本时,行为和在控制台运行时不同的原因:

不同的环境

一个程序在创建时通常会继承它父程序的环境变量的副本,除非父程序特别设置了其他的东西。从你的控制台运行的Python进程可能继承的环境变量和从C#程序运行时继承的环境变量会有所不同。需要检查的重要变量包括:PATH(工作目录)、PYTHONPATH、PYTHONHOME、PYTHONUNBUFFERED,以及你的脚本特别读取的任何变量。

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

标准的文件描述符(输入、输出和错误)在连接到控制台、文件或通过管道连接到另一个进程时,可能会表现得不同。

控制台的存在

可以通过编程的方式启动一个没有连接控制台的进程。如果你的子进程完全没有控制台,并且你没有重定向它的标准文件描述符,它在尝试读取或写入时可能会崩溃。

编辑 -我刚刚尝试创建一个win32的C#程序来调用一个基于控制台的Python脚本,但没有复现崩溃的情况——Python的控制台输出只是消失了。我记得之前遇到过这个问题,但不确定是什么因素组合导致的。值得调查一下,但我不能确定这就是你遇到的问题。

撰写回答