【发布时间】:2012-02-28 04:09:14
【问题描述】:
我对这个问题感到非常困惑。让我简要介绍一下我正在制作的程序:
我正在构建一个工具,它需要无限量的 python 脚本,运行脚本,解析 StdOut/Err,将这些结果写入数据库。
我一直在自下而上构建它,现在我需要将所有部分拼凑在一起。但是,我一直在调试问题。我通常不制作控制台应用程序,但就我所做的而言,别无选择(即,我的目标是制作一个以 python 脚本作为参数的控制台应用程序)。
因此,在我的命名空间中,我有两个主要类,为了清楚起见,我将它们分成了两个不同的文件。里面的所有功能都是静态的,所以它实际上只是一个组织的东西。这两个文件分别是我编写的 python 运行输出捕获应用程序和我编写的数据库报告应用程序的“Harness”和“Query”。现在我试图让 Harness 的结果进入查询。为了让我的同事更容易维护代码,我试图将它们保存在单独的文件中,以便更容易消化。
问题是,当我启动命令行并导航可执行文件并运行它时,将示例 python 脚本作为参数传递,我只能从应用程序的查询部分获得控制台输出。我在 Harness 文件的 main(string[] args) 函数中放置了一些 Console.WriteLines,但这些从未被写入。只有第二个 Query 类中的代码被执行——排序。
这才是真正让我感到困惑的地方,我的 Harness 应用程序中的一个函数会写入一个日志文本文件,该文件会为运行加上时间戳并报告结果。仍在写入此文本文件。然后我考虑将我的示例 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);
【问题讨论】:
-
请出示相关代码。
-
同意奥斯汀。具体来说,显示您创建/调用新流程的代码。可能没有正确设置属性来处理输入/输出流的重定向。
-
我将代码编辑到主帖中。而且,就其价值而言,运行代码的工具本身就可以工作。虽然我确实在看到重定向代码时遇到问题,但我在“线束”类中的控制台编写语句都没有输出到控制台