控制台应用运行错误代码

2024-05-16 21:28:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我完全被这个问题弄糊涂了。让我简要介绍一下我正在制作的程序:

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

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

因此,在我的名称空间中,我有两个主要的类,为了清楚起见,我将它们分成两个不同的文件。内部的所有功能都是静态的,所以它实际上只是一个组织的东西。这两个文件分别是“Harness”和“Query”,分别对应于我编写的python运行输出捕获应用程序和我编写的数据库报告应用程序。现在我尝试将Harness的结果放入查询中。为了便于同行维护代码,我尝试将它们保存在单独的文件中,以便更容易理解。在

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

这就是我真正开始困惑的地方,我的应用程序的一半里的一个功能会写入一个日志文本文件,记录运行的时间并报告结果。仍在写入此文本文件。然后我考虑将示例py文件输出到文本文件,因为我的redirect std out显然不起作用。果然,python打开了这个文本文件并对其进行了写入,这表明它确实运行了该代码。在

但是这些日志记录调用所包含的函数控制台.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);

Tags: 文件函数代码功能脚本数据库应用程序示例
1条回答
网友
1楼 · 发布于 2024-05-16 21:28:37

第一个问题,正如我所预料的,是这里可能存在死锁情况。我根本看不到您从标准输出中读取的内容,而且由于您同时重定向了输出和错误,所以您需要注意如何从它们读取数据,这样就不会出现死锁。进程中重定向属性的MSDN页面讨论了这个问题,并提供了足够满足您的目的的代码示例。在

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

相关问题 更多 >