2016-08-02 30 views
0

我试图从C#中编写的命令行项目中重定向标准输出,并通过Python文件中的数据读取。重定向C#标准输出并用Python读取

目前,C#应用程序将从传感器读取的数据写入CSV文件。我必须稍后运行Python文件来获取和处理数据(必须在Python中完成,数据收集必须在.NET中使用SDK来完成)。

我希望能够同时运行C#和Python项目,并将数据流直接从C#传输到Python项目,而无需使用中间本地文件(CSV)。

我已经在SO和MSDN文档中完成了我自己的打猎。我正在寻找使用ProcessStartInfo.RedirectStandardOutput Property重定向C#应用程序的控制台输出。

我还不知道如何从Python文件中获取此流中的数据。 This article有助于更好地理解如何接近它,但我仍然陷入困境。

我也在看Python中的subprocess.Popen.communicate,但我还不确定这是否适用于我所要求的。

任何帮助,将不胜感激。

+2

你是否正在从Python内部调用C#CLI(我编译的假设?)?通过'subprocess'?你能否为你的问题增加一些细节? –

+0

这是一个Python问题。如果它已经向stdout输出文本(例如,使用'Console.Writeline()'),那么您就不需要对C#项目执行任何操作。 * Python *是需要重定向标准输出流的设备(假设它产生了c#程序)。在c#重定向中充满了注意事项,并且有多种方式可以实现它,所以,假设python具有相似的复杂性和注意事项,最好将您的c#程序更改为输出到文本文件,然后将该文本文件读入python(因为我认为这比捕获重定向输出更容易)。 – Quantic

+0

@Kristof为了清晰起见,我在帖子中增加了更多信息。 –

回答

0

感谢@Quantic提供了一些很好的资源。使用subprocess.Popen,我可以运行C#项目的内置.exe文件,并将输出重定向到我的Python文件。我现在可以将print()输出到Python控制台,输出到C#控制台(Console.WriteLine())的所有信息。

Python代码:

from subprocess import Popen, PIPE, STDOUT 

p = Popen('ConsoleDataImporter.exe', stdout = PIPE, stderr = STDOUT, shell = True) 

while True: 
    line = p.stdout.readline() 
    print(line) 
    if not line: 
     break 

被创建,跳出在该项目的终止封闭while循环的呢?这得由线的.NET项目线的控制台输出。