0

ac# アプリケーションから python を実行しようとしているアプリケーションがあります。私はpythonランタイム環境を作成してコードを実行しようとしましたが、私のpythonコードが別のpythonファイルからいくつかのモジュールをインポートしているため、例外(インポート例外)がスローされます。私は次のコードを試しました:

var ipy = Python.CreateRuntime();
                dynamic test = ipy.UseFile(@"file path");
                test.Simple();
                Console.Read();

cmdプロンプトで実行するという別のアイデアがありますが、その方法がわかりません。cmd.exeを開いてpythonファイルを実行したいのですが、ユーザーがc#アプリケーションでファイル名を入力し、実行ボタンをクリックするとコードがcmd.exeを介して実行され、出力がc#アプリケーションに再び表示されるようにします。他の提案も大歓迎です。

4

3 に答える 3

1

次の例では、コマンドを置き換えて Python を実行し、スクリプト ファイルを追加するだけで、TCL スクリプト (コンピューターにインストールしたもの) を実行する cmd を実行します。スクリプト ファイル名の後に続く「 & exit 」に注意してください。これにより、スクリプトが終了した後に cmd が終了します。

string fileName = "C:\\Tcl\\example\\hello.tcl";
        Process p = new Process();
        p.StartInfo = new ProcessStartInfo("cmd", "/K tclsh " + fileName + " & exit")
        {
            RedirectStandardOutput = true,
            UseShellExecute = false,
            CreateNoWindow = true
        };
        p.Start();

        string output = p.StandardOutput.ReadToEnd();
        p.WaitForExit();

        Console.WriteLine(output);

        Console.ReadLine();

[アップデート]

Python のインストールとテストの後、cmd で python スクリプトを実行するコードになります。

 string fileName = @"C:\Python27\example\hello_world.py";

        Process p = new Process();
        p.StartInfo = new ProcessStartInfo("cmd", "/K " + fileName + " & exit")
        {
            RedirectStandardOutput = true,
            UseShellExecute = false,
            CreateNoWindow = true
        };
        p.Start();

        string output = p.StandardOutput.ReadToEnd();
        p.WaitForExit();

        Console.WriteLine(output);

        Console.ReadLine();

また、CMD プロセスなしで同じことができます。

string fileName = @"C:\Python27\example\hello_world.py";

        Process p = new Process();
        p.StartInfo = new ProcessStartInfo(@"C:\Python27\python.exe",  fileName )
        {
            RedirectStandardOutput = true,
            UseShellExecute = false,
            CreateNoWindow = true
        };
        p.Start();

        string output = p.StandardOutput.ReadToEnd();
        p.WaitForExit();

        Console.WriteLine(output);

        Console.ReadLine();
于 2013-09-30T07:00:06.137 に答える
0

現時点では個人的にテストすることはできませんがPython.CreateEngine()、コードで使用している人を見つけました。例:

Microsoft.Scripting.Hosting.ScriptEngine engine = 
    IronPython.Hosting.Python.CreateEngine();

この行は、この SO questionから取得されました。

Pythonコードを使用したサンプルクラスでこの記事を確認することもできます. も使用しPython.CreateEngine()ます。

于 2013-09-30T06:23:31.137 に答える
0

次のコードを試してみましたが、問題が解決したようです:

Process p = new Process();
            string cmd = @"python filepath & exit";
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.FileName = "cmd.exe";
            p.StartInfo.RedirectStandardInput = true;
            p.Start();
            StreamWriter myStreamWriter = p.StandardInput;
            myStreamWriter.WriteLine(cmd.ToString());
            myStreamWriter.Close();
            string output = p.StandardOutput.ReadToEnd();
            p.WaitForExit();
            Console.ReadLine();
于 2013-10-01T06:04:55.717 に答える