質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

620閲覧

C#からpythonファイルをコマンド実行する際に,複数行に渡るjsonファイルの内容を直接渡す方法

5REva

総合スコア15

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/03/24 10:43

編集2019/03/24 12:46

初歩的な質問で恐縮です.

C#でコマンドからpythonファイルを実行しています.このpythonファイル(pythonFilePath)に,jsonファイル(jsonFilePath)をインプットします.

現状,以下のコードです.正常に動きます.

C#

1Process process = new Process(); 2process.StartInfo.FileName = "cmd"; 3process.StartInfo.Arguments = string.Format("/c \"python {0} < {1}\"", pythonFilePath, jsonFilePath); 4process.StartInfo.UseShellExecute = false; 5process.StartInfo.RedirectStandardInput = true; 6process.StartInfo.RedirectStandardOutput = true; 7process.StartInfo.CreateNoWindow = true; 8process.Start(); 9 10StringBuilder buffer = new StringBuilder(); 11while (process.StandardOutput.EndOfStream == false) 12{ 13 buffer.AppendLine(process.StandardOutput.ReadLine()); 14} 15var text = buffer.ToString();

jsonファイルは,例えば,以下のような内容です.

json

1{ 2 "id": [ 3 2 4 ] 5}

他の仕様との関係上,jsonファイル(jsonFilePath)の内容を,直接,pythonファイル(pythonFilePath)に渡す必要があります.StandardInputを使って,以下のように修正したのですが,動かなくなりました.

C#

1Process process = new Process(); 2process.StartInfo.FileName = "cmd"; 3process.StartInfo.Arguments = string.Format("/c \"python {0}\"", pythonFilePath); 4process.StartInfo.UseShellExecute = false; 5process.StartInfo.RedirectStandardInput = true; 6process.StartInfo.RedirectStandardOutput = true; 7process.StartInfo.CreateNoWindow = true; 8process.Start(); 9 10//仕様上,jsonファイルの内容を直接渡したい.”<”で渡せない. 11using (var reader = new StreamReader(jsonFilePath, Encoding.UTF8)) 12{ 13 while (!reader.EndOfStream) 14 { 15 var line = reader.ReadLine(); 16 process.StandardInput.WriteLine(line); 17 } 18} 19 20StringBuilder buffer = new StringBuilder(); 21while (process.StandardOutput.EndOfStream == false) 22{ 23 buffer.AppendLine(process.StandardOutput.ReadLine()); 24} 25var text = buffer.ToString();

pythonファイルでコマンド実行する際に,jsonファイルの内容を直接渡す方法について,アドバイスを頂戴できますと幸いです.

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/03/24 10:53

Python もタグに必要ではないでしょうか(もしかしたらそのコードも。どこに問題があるかは全体を見る必要があります)
guest

回答2

0

自己解決

変更前

c#

1using (var reader = new StreamReader(jsonFilePath, Encoding.UTF8)) 2{ 3 while (!reader.EndOfStream) 4 { 5 var line = reader.ReadLine(); 6 process.StandardInput.WriteLine(line); 7 } 8}

変更後

c#

1 2//jsonTextは,jsonファイルからDeserialize → Serializeした 3using (StreamWriter sw = process.StandardInput) 4{ 5 if (sw.BaseStream.CanWrite) 6 { 7 sw.WriteLine(jsonText); 8 } 9}

で上手く行きました.StreamWriterを使わなきゃいけない理由を確認します.

投稿2019/03/24 14:41

5REva

総合スコア15

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

cmd.exe の標準入力に渡っています。cmd を使わず Python を起動してみてください。

投稿2019/03/24 11:22

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

5REva

2019/03/24 14:42

早速に,誠にありがとうございます.pythonでやっても同じ状況になりました.最終的に,「解決した方法」でうまくいきました.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問