Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#控制台应用程序中的Python脚本_C#_Python_Console Application - Fatal编程技术网

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

C#控制台应用程序中的Python脚本,c#,python,console-application,C#,Python,Console Application,首先,这是其中的一部分: 我的python脚本在命令行中正常运行,但当我在控制台应用程序中运行它时,它无法正常运行 我的python脚本假定从一个目录中获取所有.log文件,并将它们转换为csv文件。然后我想从我的C#控制台应用程序访问csv文件。当我运行python脚本时,它创建了文件,然后退出。没有做过任何事 下面是我用来尝试和运行python脚本的代码。(我不是也不想使用IronPython) 你没有给我们太多的支持。以下是从另一个程序运行Python脚本与从控制台运行Python脚本时可

首先,这是其中的一部分:

我的python脚本在命令行中正常运行,但当我在控制台应用程序中运行它时,它无法正常运行

我的python脚本假定从一个目录中获取所有.log文件,并将它们转换为csv文件。然后我想从我的C#控制台应用程序访问csv文件。当我运行python脚本时,它创建了文件,然后退出。没有做过任何事

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


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

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

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

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


编辑-我只是通过创建一个win32 C#程序来调用基于控制台的Python脚本来尝试这一点,但无法再现崩溃-Python的控制台输出只是消失在以太中。我记得我以前在这方面遇到过问题,但我不确定是什么因素组合导致了问题。这可能值得调查,但我不能确定这是否给您带来了麻烦。

对不起,我不太明白您所说的“它创建了文件,然后退出”是什么意思。运行C#代码时会发生什么,与手动运行Python脚本时有什么不同?Python脚本中有什么?当我运行C#代码时,会在我通过Python脚本指定其creaction的目录中创建一个名为“results.csv”的文件。该文件为空/其中无任何内容。当我从命令行运行python脚本时,我得到了相同的创建/覆盖文件,其中包含文件的实际内容。另一个问题:C#应用程序是作为控制台应用程序(/target:exe)还是GUI应用程序(/target:winexe)构建的?你能将python脚本发布到pastebin或类似的地方吗?如果没有,你能至少详细说明它是什么,你在观察什么吗?Python脚本的退出代码是什么?如果不使用CreateNoWindow,是否会发生同样的情况?你能确定Python脚本在停止之前执行了多少吗?那么,当控制台应用程序从VS2010启动时,我如何检查正在使用的路径呢?你可以在C程序中检查Environment.CurrentDirectory和Environment.GetEnvironmentVariables()。您可以尝试设置ProcessStartInfo.WorkingDirectory和ProcessStartInfo.EnvironmentVariables。如果您可以让Python程序在崩溃之前在某处编写输出,那么您可以检查os.getcwd()和os.environ。
    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);
        }

    }