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側は単体での実行は可能です
回答1件
あなたの回答
tips
プレビュー