2016-03-21 10 views
0

私は楽しいためにミニPython IDEを作っています。何故なの。だから私はC#からpythonスクリプトを呼び出すことができるようになりたい、今は単純なシナリオをテストしています。私はこれがプロフェッショナルIDEがおそらく動作する方法ではないことを知っている。C#でPythonスクリプトを呼び出そうとしています

private void Run_Click(object sender, EventArgs e) 
    { 
     run_cmd("C:/Python34/python.exe", "C:/Users/Alaseel/Desktop/test.py"); 
    } 

    private void About_Click(object sender, EventArgs e) 
    { 
     // Open the about documentation 
    } 

    private void run_cmd(string cmd, string args) 
    { 
     ProcessStartInfo start = new ProcessStartInfo(); 
     start.FileName = "C:/Python34/python.exe"; 
     start.Arguments = string.Format("{0} {1}", cmd, args); 
     start.UseShellExecute = false; 
     start.RedirectStandardOutput = true; 
     using (Process process = Process.Start(start)) 
     { 
      using (StreamReader reader = process.StandardOutput) 
      { 
       string result = reader.ReadToEnd(); 
       Console.Write(result); 
      } 
     } 
    } 

Windowsフォームアプリケーションで[実行]ボタンをクリックすると、python.exeが短時間実行されて閉じられます。実際に渡されたファイルは実行されません。間違っていますか?

PS:run_cmdメソッドは私のものではありません。以前にスレッドでこの問題を調べ、コードを使用しました。しかし、私は方法を間違って使用していると思う。

アイデア?ありがとうございました!

答えて

2

この場合、実際にはpython.exeパスを2回入れています。おそらく、無効なコマンドはどれ"C:/Python34/python.exe" "C:/Python34/python.exe" "C:/Users/Alaseel/Desktop/test.py"

:あなたのコマンドラインは次のようになります

cmdようと start.Filenameあなたはそれを持っています。

+0

ご協力いただきありがとうございます。メソッドのシグネチャまたはメソッド呼び出しをどのように再構築しますか? – katie1245

+0

これを行うにはさまざまな方法があります。私はおそらくstart.FileName = cmdのようなことをします。そして、引数にcmdを渡さないようにします。あなたが呼び出しているプログラムの引数ではなく、プログラム自体です。だから、start.Arguments = args。それはうまくいくはずです! (私はテストしなかった) – HammerHeart

関連する問題