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

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

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

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

C#

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Unity

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

Q&A

解決済

1回答

1348閲覧

Unity (C#)から外部プロセスを実行したときに応答なしになる

groggy_egg

総合スコア24

CSV

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

C#

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Unity

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

0グッド

0クリップ

投稿2020/03/27 02:28

編集2020/03/27 03:48

Unity (C#)からPythonを実行したいのですが
実行時にUnityEditorが応答なしになります。

Unity (C#)側のコード
参考サイト
↑上記スクリプトを空のゲームオブジェクトにアタッチして実行
それ以外はプロジェクト作成時の初期状態

C#

1public class CallPython : MonoBehaviour 2{ 3 private void Start() 4 { 5 string FS = Path.DirectorySeparatorChar.ToString();//ファイルセパレーター 6 //pythonがある場所 7 string pyExePath = @"C:\Users***\AppData\Local\Programs\Python\Python38\python.exe"; 8 //ファイルのパス 9 string ResourcesPath = Application.dataPath + FS + "Resources"; 10 //実行したいスクリプトがある場所 11 string test = @"test.py"; 12 string args = ResourcesPath + FS + test; 13 14 //外部プロセスの設定 15 ProcessStartInfo processStartInfo = new ProcessStartInfo() 16 { 17 FileName = pyExePath, //実行するファイル(python) 18 UseShellExecute = false,//シェルを使うかどうか 19 CreateNoWindow = true, //ウィンドウを開くかどうか 20 RedirectStandardOutput = true, //テキスト出力をStandardOutputストリームに書き込むかどうか 21 Arguments = args //実行するスクリプト 引数(複数可) 22 }; 23 24 print("start"); 25 //外部プロセスの開始 26 Process process = Process.Start(processStartInfo); 27 28 //ストリームから出力を得る 29 StreamReader streamReader = process.StandardOutput; 30 string str = streamReader.ReadLine(); 31 32 //外部プロセスの終了 33 process.WaitForExit(); 34 process.Close(); 35 print(str); 36 37 //実行 38 print("end"); 39 } 40 41}

Python側の処理
実行結果が得られたもの

  • txtファイル(1.6MB)の読み取りと出力
  • xmlファイル(5.5MB)の読み取りと出力

応答不能になるもの

  • csvファイル(BOMあり,8.5MB)の読み取りと出力

参考サイト
BOM対応
参考サイト
出力は、20文字程度×20行程度の日本語文字列です

python

1class PTDic: 2 def __init__(self): 3 cur = path.dirname(__file__) 4 self.dicpath = path.join(cur,'./dic/pth-utf8.csv') 5 self.framepath = path.join(cur,'./dic/frames-utf8.csv') 6 self.encoding='utf-8-sig' 7 8 # csv から対象のデータを検索 9 def searchPT(self,lemma): 10 rslt=[] 11 with open(self.dicpath,'r',encoding=self.encoding) as f: 12 # ヘッダーの取得 13 header=next(f) 14 header=header.replace('\"','') # ""除去 15 header=header.split(',') # ,区切り 16 for r in header: 17 # ""を除去 18 r=r.replace('\"','') 19 r=r.replace('\n','') # 改行文字除去 20 rslt.append(header) 21 # データの取得 22 reader = csv.reader(f) 23 for row in reader: 24 if row[2]==lemma: 25 #print(row[2]) 26 for r in row: 27 # ""を除去 28 r=r.replace('\"','') 29 rslt.append(row) 30 if len(rslt)>0: 31 # csvのリストデータを辞書に変換 32 rslt=self.list2dic(rslt) 33 return rslt 34 35if __name__ == '__main__': 36 ptd=PTDic() 37 rslt=ptd.searchPT('運ぶ') 38 pprint(rslt) 39

試しに、C#側でProcess.Start()の前にprint("start")したり
WaitForExit()の前にprint(str)で結果を出力しようともしたのですが
通常に実行した場合と同様に何も表示されずに固まります

なおpython側は単体での実行は可能です

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

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

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

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

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

fiveHundred

2020/03/27 03:24

コードを質問文に追記してください(特にPython側で応答不能になるもの)。 参考サイトを提示しても、どのコードをどのように使っているのかが分かりません。
groggy_egg

2020/03/28 00:11

回答ありがとうございます。コードを追記したのでよろしくお願いします
guest

回答1

0

自己解決

ProcessStartInfoのCreateNoWindow=falseにして実行したところ
Pythonのウィンドウが表示されたままになっていたのが原因でした
原因は自分で調べてみます

投稿2020/03/28 01:38

groggy_egg

総合スコア24

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問