繁体   English   中英

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

[英]Python Script from C# console application

首先,这是其中的一个重复步骤: 在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);
        }

    }

您没有给我们太多帮助。 从其他程序运行Python脚本时,与从控制台运行脚本时,行为可能会有所不同的原因有很多:

不同的环境

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

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

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

控制台的存在

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

编辑-我只是通过创建一个win32 C#程序来调用基于控制台的Python脚本并无法重现崩溃来进行尝试-Python的控制台输出仅消失在以太中。 我想我记得以前曾经遇到过问题,但是我不确定哪种因素会导致问题。 可能值得调查,但是我不确定这会引起您的麻烦。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM