我对此问题感到绝对困惑。让我快速运行我正在编写的程序:控制台应用程序运行错误代码
我正在构建一个无限期的python脚本,运行脚本,解析StdOut/Err,并将这些结果写入数据库。
我一直在从底层开始构建它,现在我需要将所有的部分拼凑在一起。不过,我一直在调试问题。我通常不制作控制台应用程序,但为了我所做的目的,没有其他选择(即我的目标是创建一个以python脚本作为参数的控制台应用程序)。
因此,在我的命名空间中,为了清楚起见,我有两个主要的类,为了清晰起见,我将它们分成了两个不同的文件。所有内部的功能都是静态的,所以它实际上只是一个组织性的东西。这两个文件分别是我编写的python运行输出捕获应用程序和我编写的数据库报告应用程序的“Harness”和“Query”。现在我试图让Harness的结果进入查询。为了让代码更容易维护,我试图将它们保存在单独的文件中,以便更容易消化。
问题是,当我启动我的命令行并浏览可执行文件并将其作为参数传递给示例python脚本时,我只从应用程序的查询一半获得控制台输出。我已经在Harness文件的main(string [] args)函数中放置了一些Console.WriteLines,但这些函数永远不会写入。只有第二个Query类中的代码才会被执行 - 有点。
这里是东西真的开始混淆我的地方,我的线束中的一个功能是应用程序的一半写入日志文本文件,该文件的时间标记运行并报告结果。该文本文件仍在写入。然后我想我的示例py文件输出到一个文本文件,因为我的重定向标准输出显然不工作。果然,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);
请显示一些相关的代码。 – 2012-02-06 17:41:14
同意奥斯汀。具体来说,显示您创建/调用新流程的代码。这些属性可能没有正确设置来处理输入/输出流的重定向。 – Servy 2012-02-06 17:43:13
我将代码编辑到主帖子中。 而且,值得一提的是,运行代码的线束本身就可以工作(编辑)。虽然看到重定向代码时确实遇到问题,但“harness”类中的控制台写入语句没有输出到控制台 – Wuzseen 2012-02-06 17:48:28