控制台应用程序运行错误代码

本文关键字:错误代码 运行 应用程序 控制台 | 更新日期: 2023-09-27 18:23:45

我对这个问题感到非常困惑。让我简要介绍一下我正在制作的程序:

我正在构建一个使用不确定数量的python脚本的工具,运行脚本,解析StdOut/Err,将这些结果写入数据库。

我一直在自下而上地构建它,现在我需要把所有的部分拼凑在一起。但是,我在调试时遇到了问题。我通常不制作控制台应用程序,但就我正在做的事情而言,没有其他选择(即,我的目标是制作一个以python脚本为参数的控制台应用程序)。

因此,在我的命名空间中,我有两个主要类,为了清晰起见,我将它们分离成了两个不同的文件。里面的所有功能都是静态的,所以它实际上只是一个组织的东西。这两个文件分别是"Harness"answers"Query",分别是我编写的运行python的输出捕获应用程序和我编写的数据库报告应用程序。现在我正试图让Harness的结果进入Query。为了让代码更容易被我的同行维护,我试图将它们保存在单独的文件中,以便更容易理解。

问题是,当我启动命令行并导航可执行文件并通过一个示例python脚本作为参数运行它时,我只从应用程序的Query半部分获得控制台输出。我在Harness文件的main(string[]args)函数中放入了一些Console.WriteLines,但这些永远不会被写入。只执行第二个Query类中的代码——有点像。

这就是我真正开始感到困惑的地方,我的Harness应用程序的一半中的一个函数会写入一个日志文本文件,该文件会对运行进行时间戳,并应该报告结果。这个文本文件仍在写入中。然后我考虑将我的示例py文件输出到一个文本文件,因为我的重定向std-out显然不起作用。果不其然,python打开了那个文本文件并向它写信,向我暗示它确实运行了那个代码。

然而,这些日志记录调用所在的函数包含不输出到控制台的Console.WriteLines。控制台输出唯一工作的时间是在应用程序的后半部分。

如果有人能对这些问题有所了解,我真的很喜欢。我的很多代码都包含一些敏感数据,所以我不想把它们大量转储,我觉得代码中真的没有特定的领域与这个问题相关——无可否认,我不确定。让我知道你需要我做什么,我会尽力的。

        List<string> retList = new List<string>();
        // Loads Python
        Process pr = new Process();
        pr.StartInfo.FileName = @"C:'Python27'python.exe";
        pr.StartInfo.Arguments = script;
        Console.WriteLine(script);
        //pr.StartInfo.Arguments = @"C:'PythonProj'hello.py";
        pr.StartInfo.UseShellExecute = false;
        pr.StartInfo.RedirectStandardOutput = true;
        pr.StartInfo.RedirectStandardError = true;
        // Runs Test Script
        pr.Start();
        string output = pr.StandardError.ReadToEnd();
        pr.WaitForExit();
        Console.WriteLine(output);

控制台应用程序运行错误代码

正如我所料,第一个问题是这里可能存在死锁条件。我根本看不出您从标准输出中读取的内容,而且由于您正在重定向输出和错误,因此需要小心如何从它们中读取内容,以免出现死锁。Process中重定向属性的MSDN页面讨论了这个问题,并提供了足以满足您需要的代码示例。

如果问题是您在控制台中没有看到进程的输出,那么到目前为止,我不知道应该在哪里写入(或者从进程中读取)。为了简洁,你省略了它吗?如果是,请将其包括在内。