Запускать и взаимодействовать с приложением Python из C # Script - PullRequest
0 голосов
/ 11 ноября 2018

Я пытаюсь использовать Unity C # (не волнуйтесь, легко портировать на обычный C #, но в настоящее время у меня нет программы, которая позволяет мне это делать) для запуска приложения на Python, используя следующий код, который в основном просто запускает программу на Python, читает и записывает ввод и вывод:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

using System;
using System.Diagnostics;
using System.IO;
 using System.Text;

public class PythonSetup : MonoBehaviour {

    // Use this for initialization
    void Start () {
        SetupPython ();
    }

    void SetupPython() {
        string fileName = @"C:\sample_script.py";

        Process p = new Process();
        p.StartInfo = new ProcessStartInfo(pythonExe, "YOUR PYTHON3 PATH")
        {
            RedirectStandardOutput = true,
            UseShellExecute = false,
            CreateNoWindow = true
        };

        p.Start();

        UnityEngine.Debug.Log (p.StandardOutput.ReadToEnd ());
        p.StandardInput.WriteLine ("\n hi \n");
        UnityEngine.Debug.Log(p.StandardOutput.ReadToEnd());

        p.WaitForExit();
    }
}

Приложение Python, расположенное по адресу C: /sample_script.py, имеет вид:

print("Input here:")
i = input()
print(i)

Программа на C # выдает ошибку:

InvalidOperationException: Standard input has not been redirected System.Diagnostics.Process.get_StandardInput () (wrapper remoting-invoke-with-check) System.Diagnostics.Process:get_StandardInput ()

Спасибо за помощь заранее!

Чтобы поместить в обычный проект C #, просто замените UnityEngine.Debug.Log на Console.WriteLine и замените Start () на Main ().

1 Ответ

0 голосов
/ 12 ноября 2018

Вам необходимо настроить процесс так, чтобы он знал, как перенаправить ввод из потока стандартного ввода в целевое приложение.Подробнее об этом здесь .

Практически все равно, что включить еще один инициализатор свойства в ProcessStartInfo :

    p.StartInfo = new ProcessStartInfo(pythonExe, "YOUR PYTHON3 PATH")
    {
        //You need to set this property to true if you intend to write to StandardInput.
        RedirectStandardInput = true,
        RedirectStandardOutput = true,
        UseShellExecute = false,
        CreateNoWindow = true
    };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...