2009-04-14 8 views
5

いつものようにProcessクラスを使ってみましたが、うまくいかなかった。私がやっていることは、誰かがダブルクリックしたようなPythonファイルを実行しようとしていることです。C#でファイルをシェルで実行するには?

可能ですか?

EDIT:

サンプルコード:

string pythonScript = @"C:\callme.py"; 

string workDir = System.IO.Path.GetDirectoryName (pythonScript); 

Process proc = new Process (); 
proc.StartInfo.WorkingDirectory = workDir; 
proc.StartInfo.UseShellExecute = true; 
proc.StartInfo.FileName = pythonScript; 
proc.StartInfo.Arguments = "1, 2, 3"; 

私はすべてのエラーを得ることはありませんが、スクリプトが実行されていません。スクリプトを手動で実行すると、結果が表示されます。

+0

コードを共有していただけますか? –

+0

「うまくいかない」とはどういう意味ですか? –

+0

それはSystem.Diagnostics.Processクラスでしたか?例えばhttp://blogs.msdn.com/csharpfaq/archive/2004/06/01/146375.aspx –

答えて

7

リダイレクトされた標準入力と出力(標準入力から情報を渡します)を使用して、C#のPythonスクリプトを実行するためのコードです。 Pythonの場所は、あなたが見ることができるようにハードコードされている、リファクタリングすることができます。

private static string CallPython(string script, string pyArgs, string workingDirectory, string[] standardInput) 
    { 

     ProcessStartInfo startInfo; 
     Process process; 

     string ret = ""; 
     try 
     { 

      startInfo = new ProcessStartInfo(@"c:\python25\python.exe"); 
      startInfo.WorkingDirectory = workingDirectory; 
      if (pyArgs.Length != 0) 
       startInfo.Arguments = script + " " + pyArgs; 
      else 
       startInfo.Arguments = script; 
      startInfo.UseShellExecute = false; 
      startInfo.CreateNoWindow = true; 
      startInfo.RedirectStandardOutput = true; 
      startInfo.RedirectStandardError = true; 
      startInfo.RedirectStandardInput = true; 

      process = new Process(); 
      process.StartInfo = startInfo; 


      process.Start(); 

      // write to standard input 
      foreach (string si in standardInput) 
      { 
       process.StandardInput.WriteLine(si); 
      } 

      string s; 
      while ((s = process.StandardError.ReadLine()) != null) 
      { 
       ret += s; 
       throw new System.Exception(ret); 
      } 

      while ((s = process.StandardOutput.ReadLine()) != null) 
      { 
       ret += s; 
      } 

      return ret; 

     } 
     catch (System.Exception ex) 
     { 
      string problem = ex.Message; 
      return problem; 
     } 

    } 
+0

ありがとう、あなたはプログラムでpythonの場所を取得する方法を知っていますか? –

5

Process.Startが有効です。そうでない場合は、コードとエラーが表示されますか?

3

最後にproc.Start()を忘れました。 Start()を呼び出すと、コードが動作するはずです。

関連する問題