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

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

新規登録して質問してみよう
ただいま回答率
85.35%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

C#

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Python

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

Q&A

解決済

1回答

2609閲覧

【Unity】UnityからPythonを動作させCSVファイルを読み書きさせたい

arapon516

総合スコア15

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

C#

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Python

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

0グッド

0クリップ

投稿2021/11/26 03:00

閲覧ありがとうございます.
タイトル通りUnityからPythonを動かし,PythonサイドでCSVファイルの読み書きを行ってからUnityで編集されたcsvファイルを使いたいと思っています.
そのために以下のようなプログラムを書きましたが,エラーも反映もされていません.
Unity側では,ボタンを押すとプログラムが動作するように設定しました.

C#

1using System.Diagnostics; 2using System.IO; 3using UnityEngine; 4 5public class cs : MonoBehaviour 6{ 7 //pythonがある場所 8 private string pyExePath = @"(絶対パス)\python.exe"; 9 10 //実行したいスクリプトがある場所 11 private string pyCodePath = @"(絶対パス)\Assets\Scripts\csvf.py"; 12 private void Start() 13 { 14 //外部プロセスの設定 15 ProcessStartInfo processStartInfo = new ProcessStartInfo() 16 { 17 FileName = pyExePath, //実行するファイル(python) 18 UseShellExecute = true,//シェルを使うかどうか 19 CreateNoWindow = true, //ウィンドウを開くかどうか 20 RedirectStandardOutput = true, //テキスト出力をStandardOutputストリームに書き込むかどうか 21 Arguments = pyCodePath + " " + "Hello,python.", //実行するスクリプト 引数(複数可) 22 }; 23 24 //外部プロセスの開始 25 Process process = Process.Start(processStartInfo); 26 27 //ストリームから出力を得る 28 StreamReader streamReader = process.StandardOutput; 29 string str = streamReader.ReadLine(); 30 31 //外部プロセスの終了 32 process.WaitForExit(); 33 process.Close(); 34 35 36 } 37}

Python

1# -*- coding: utf-8 -*- 2import csv 3import sys 4 5with open('(絶対パス)/Assets/Resources/out1.csv','w',newline='') as f: 6 writer = csv.writer(f) 7 writer.writerow(['連番ID', '姓', '名']) 8 writer.writerow([1, '成功', '葵']) 9 writer.writerow([2, '成功1', 'さくら']) 10 writer.writerow([3, '成功2', '陽菜'])

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

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

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

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

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

BeatStar

2021/11/26 03:28 編集

なぜC#を使っているのにPythonを呼び出す必要があるのでしょうか。 それとPythonで処理したデータはUnity側で使うのでしょうか。 この二つによって変わってきますよ。 単に「CSVファイルを処理したいだけ」であればPythonを動かす必要はありません。確かにPythonの方がやりやすいかもしれませんが、逆に遠回りです。 仕様上、どうしてもPythonを動かさないといけないというのなら仕方ないですが。 いわゆる、XY問題になりそうなので。
arapon516

2021/11/26 03:37

閲覧ありがとうございます!! 本当はPythonでTweetデータ取得し,CSVに格納というタスクを実行させたいのですが,Tweetデータ云々以前にそもそも呼び出す工程でつまずいたので質問させていただきました! 呼び出せたらデータ収集等も簡単かなと思ったのですが,安易な考えでしょうか....?
退会済みユーザー

退会済みユーザー

2021/11/26 03:50

思い付きで根拠なしですが、プロセスが完了するまで StreamReader streamReader = process.StandardOutput; は待つ必要があるとかいうことはないですか?
arapon516

2021/11/26 04:13

ということはPython側で何かstrに返す出力が必要ってことですか.....? ほんと初学者なので的外れなことを言ってたらすみません;;
BeatStar

2021/11/26 04:20

@ 質問者さん つまり、「Twitterのツイートを取得したい」ってことでしょうか。仮にそうだとして、そのCSVデータはどこで使うのでしょうか? もし Unity側で使いたいってことなら、Pythonを使わずにそのままUnity側でTwittyなるライブラリ等を利用してやった方が早い気がします。(今回のやり方でもできなくは無いと思いますが…) 後、他の方が仰っている意味は、「Pythonとの標準入出力を使ってやり取りするつもりなのか」だと思います。(C#の基礎やPythonの基礎が分かっているとわかると思いますが)
退会済みユーザー

退会済みユーザー

2021/11/26 04:49 編集

Process process = Process.Start(processStartInfo); で別のプロセスで Pyhton アプリが動き出すが、それの完了を待たずに即次の行 StreamReader streamReader = process.StandardOutput; に制御が飛ぶはずなので、StandardOutput にはまだ何も出力されてないのではないか?・・・と言ってます。
dodox86

2021/11/26 05:29

> ということはPython側で何かstrに返す出力が必要ってことですか.....? ですが、少なくともUnity/C#側のコードを見ると、 > StreamReader streamReader = process.StandardOutput; > string str = streamReader.ReadLine(); となっていて、明らかにPython側からの出力を待っていますよね。どこかの記事のコードを参考にされたのかもしれませんが、初心者とはいえご自身で書いたのですから、その内容の解説を他人に求めちゃダメでしょう。ちゃんと理解しないと。
arapon516

2021/12/06 10:07

皆様ご意見ありがとうございます,皆様がおっしゃる通り完全に自分のコード理解不足です.引用するコードに対してももっとより理解する必要があるとより実感しました.ありがたいご意見本当にありがとうございます.
guest

回答1

0

ベストアンサー

コンソールにエラーが出ていませんか?
先日同じような事をしましたが、「RegisterStandardOutputtrueにするなら、UseShellExecutefalseにしろ」と怒られた気がしましたが。

マニュアルにも、そのように書かれています。

To use StandardOutput, you must set ProcessStartInfo.UseShellExecute to false, and you must set ProcessStartInfo.RedirectStandardOutput to true. Otherwise, reading from the StandardOutput stream throws an exception.

投稿2021/11/26 11:58

katsuko

総合スコア3538

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

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

arapon516

2021/12/06 10:07 編集

ご丁寧にありがとうございます。 おそらくこれが原因でした.ご丁寧にアドバイスありがとうございます.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問