2016-08-02 19 views
0

私はC#で書いたコマンドラインプロジェクトからその標準出力をリダイレクトしようとしていて、Pythonファイルのデータを読み込んでいます。C#標準出力をリダイレクトしてPythonで読む

現在、C#アプリケーションは、センサーから読み取ったデータをCSVファイルに書き込みます。私は後でPythonファイルを実行してデータを取得し処理する必要があります(Pythonで行われなければならず、データコレクションは.NETで実行されてSDKを使用する必要があります)。

私は、C#とPythonプロジェクトを同時に実行し、中間のローカルファイル(CSV)を使用せずに、C#からPythonプロジェクトに直接データストリームを転送したいと考えています。

私はSOとMSDNドキュメントで自分の狩りをしました。私はProcessStartInfo.RedirectStandardOutput Propertyを使用して、C#アプリケーションのコンソール出力をリダイレクトすることを検討しています。

このストリームのデータをPythonファイルから取得する方法はまだわかりません。 This articleは、それに近づく方法をよりよく理解するのに役立ちましたが、私はまだ固執しています。

私はまた、Pythonでsubprocess.Popen.communicateを見ていますが、それが私が求めているところでうまくいくかどうかはまだ分かりません。

ご協力いただければ幸いです。

+2

あなたはPython内からC#CLI(私は推測?)を呼び出していますか? 'サブプロセス 'を通して?あなたの質問にもう少し詳細を追加できますか? –

+0

これはPythonの質問です。既に標準出力にテキストを出力している(例えば、 'Console.Writeline()'を使って)場合、C#プロジェクトに行う必要はありません。 * Python *はstdoutストリームをリダイレクトする必要があるものです(それがC#プログラムを生成していると仮定します)。 C#のリダイレクトには注意点があり、それを行う方法はいくつかあります。したがって、Pythonにも同様の複雑さと警告があると仮定すると、C#プログラムをテキストファイルに出力し、そのテキストファイルをPythonに読み込む方が良いでしょうリダイレクトされた出力をキャプチャするよりも簡単だと思います)。 – Quantic

+0

@Kristof私は、分かりやすくするためにポストにいくつかの情報を追加しました。 –

答えて

0

素晴らしいリソースを提供してくれた@Quanticに感謝します。 subprocess.Popenを使用して、私はC#プロジェクトのビルド済み.exeを実行し、出力をPythonファイルにリダイレクトできます。私はprint()に、C#コンソール(Console.WriteLine())に出力されているすべての情報をPythonコンソールに出力できるようになりました。

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 

これは、それが作成されるラインで.NETプロジェクトラインのコンソール出力を取得し、プロジェクトの終了時に囲むwhileループの外に壊れます。

関連する問題