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

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

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

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

Unity

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

Python

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

Q&A

解決済

1回答

1702閲覧

Unityでpythonの出力結果を取得したい

kohehe

総合スコア13

C#

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

Unity

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

Python

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

0グッド

0クリップ

投稿2020/06/02 02:11

ほぼ同じ質問がteratailにて確認してはいるのですが、私めの矮小な理解力では分からなかったので、質問させていただきます。

参考サイト

C#側

using System.Collections; using System.Collections.Generic; using UnityEngine; using System.IO; using System.Diagnostics; public class PythonGo : MonoBehaviour { //pythonの場所 private string pyExePath = @"C:\Users\81909\AppData\Local\Programs\Python\Python37\python.exe"; //実行したいスクリプトがある場所 private string pyCodePath = @"C:/Users/81909/Desktop/MeCab/MeCabPython/otameshi.py"; // Start is called before the first frame update private void Start() { //外部プロセス設定 ProcessStartInfo processStartInfo = new ProcessStartInfo() { //実行するpythonファイル FileName = pyExePath, //シェルを使うかどうか UseShellExecute = false, //ウィンドゥを開くかどうか CreateNoWindow = true, //テキスト出力をStandardOutputストリームに書き込むかどうか RedirectStandardOutput = true, //実行スクリプト 引数(複数可能) Arguments = pyCodePath + " " + "Hello,Python.", }; //外部プロセス開始 Process process = Process.Start(processStartInfo); //ストリームからの出力を得る StreamReader streamReader = process.StandardOutput; string str = streamReader.ReadLine(); //外部プロセス終了 process.WaitForExit(); process.Close(); //実行 print(str); } }

python側

import sys playerSelect=str(sys.argv[1]) print( "REPLY[" + playerSelect + "]:" + "Hello,CS." )

出力結果はNullです。

teratailで以前見られた質問でのベストアンサーが
「相対パスを使ってますが、こいつの実行時のカレントパスはどこにあるか確認してみては」
でした。

カレントパスをどう弄るのか?そもそもunityで動かす際のカレントパスはどこを指しているのか?等、具体的なことが分からないです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

C#

1 //実行スクリプト 引数(複数可能) 2 Arguments = pyCodePath + " " + "Hello,Python.",

この空白が全角大文字なので分割された引数とみなされずにエラー終了となっていました。
process.ExitCodeを確認するか、標準エラー出力を確認すればすぐ原因を見抜けたでしょう。

stderrの内容はこうなっておりました。

python: can't open file 'C:/Users/81909/Desktop/MeCab/MeCabPython/otameshi.py縲€Hello,Python.': [Errno 2] No such file or directory

投稿2020/06/04 11:26

hope_mucci

総合スコア4447

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

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

kohehe

2020/06/05 01:44

ご返答ありがとうございます。 半角に直しましたが、同じくNullと出力されました。 試しに python側 print(aaaa) C#側 Arguments = pyCodePath, としたのですが、同じくNullの状態でした。 それと、passの表記が"/"と"\"を併用している状態でしたので、"/"に統一した状態と"\"に統一した状態で試しましたが、それらも同じく出力結果はNullでした。
kohehe

2020/06/05 02:16

指定しているpython.exeを別のpython.exeに変えたらちゃんと出力されました! 間違ったpython.exeを指定していたようです。解決できました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問