前提・実現したいこと
こちらのサイト(https://tofgame.hatenablog.com/entry/2019/04/30/011221)を参考に、Unity(C#)側からPythonの実行を行おうとしています。
サイト通りの、文字を出力するだけのtst.pyは実行できるのですが、OpenCV(cv2)などを用いた画像表示やカメラの起動など(画面が別表示されようなもの)ができません。
※エラーメッセージは出ず、スルーされている様子。
どのようにすればよいでしょうか?
該当のソースコード
C#
1CsPy.cs(Unity側、Pythonを実行する) 2 3using System.Diagnostics; 4using System.IO; 5using UnityEngine; 6 7public class CsPy : MonoBehaviour { 8 //pythonがある場所 9 private string pyExePath = @"(Pythonの実行ファイルが置いてある場所)\python.exe"; 10 11 //実行したいスクリプトがある場所 12 private string pyCodePath = @"(実行したいスクリプトの場所)\tst.py"; 13 14 private void Start () { 15 //外部プロセスの設定 16 ProcessStartInfo processStartInfo = new ProcessStartInfo() { 17 FileName = pyExePath, //実行するファイル(python) 18 UseShellExecute = false,//シェルを使うかどうか 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 print(str); 37 } 38} 39
Python
1tst.py(Unity側から実行される・成功しているもの) 2 3import sys #引数を得るために使用 4playerSelect=str(sys.argv[1]) 5print( "REPLY[" + playerSelect + "]:" + "Hello,CS." )
Python
1失敗例(Anaconda Promptでは動作している) 2 3import cv2 4 5img = cv2.imread("〇〇〇.jpg") 6img = cv2.rectangle(img,(10,20),(150,60),(255,255,0),3) 7img = cv2.circle(img, (100, 200), 1, (0, 0, 255), 2) 8img = cv2.putText(img,'OpenCV',(0,50), cv2.FONT_HERSHEY_SIMPLEX, 0.5,(255,255,255),2,cv2.LINE_AA) 9 10cv2.imshow("color",img) 11cv2.waitKey(0) 12cv2.destroyAllWindows()
試したこと・エラーメッセージ
UseShellExecute = false,//シェルを使うかどうか
という部分をtrueに変えればできのではないかと思い、trueに変更すると以下のエラーメッセージがでます。
※tst.py(成功例)の場合でも、trueに変更するとエラー
エラーメッセージ InvalidOperationException: The Process object must have the UseShellExecute property set to false in order to redirect IO streams. System.Diagnostics.Process.StartWithShellExecuteEx (System.Diagnostics.ProcessStartInfo startInfo) (at <ae22a4e8f83c41d69684ae7f557133d9>:0) System.Diagnostics.Process.Start () (at <ae22a4e8f83c41d69684ae7f557133d9>:0) (wrapper remoting-invoke-with-check) System.Diagnostics.Process.Start() System.Diagnostics.Process.Start (System.Diagnostics.ProcessStartInfo startInfo) (at <ae22a4e8f83c41d69684ae7f557133d9>:0) CsPy.Start () (at Assets/CsPy.cs:26)
補足情報(FW/ツールのバージョンなど)
Python3.0
Unity 2019.3.13f1
Visual Studio 2015
あなたの回答
tips
プレビュー