2

コマンドプロンプトを介してC#からPythonコードを実行したい.コードは以下に添付されています

    Process p = new Process();
    p.StartInfo.FileName = "cmd.exe";
    p.StartInfo.WorkingDirectory = @"d:";
    p.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
    p.StartInfo.UseShellExecute = false;
    p.StartInfo.RedirectStandardOutput = true;
    p.StartInfo.RedirectStandardInput = true;

    p.Start();
    p.StandardInput.WriteLine(@"cd D:\python-source\mypgms");
    p.StandardInput.WriteLine(@"main.py -i example-8.xml -o output-8.xml");

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

    Console.WriteLine("Output:");
    Console.WriteLine(output);

Output :

D:\python-source\mypgms>main.py -i example-8.xml -o output-8.xml

D:\python-source\mypgms>

しかし、何も起こりませんでした。実際には main.py が私のメイン プログラムであり、2 つの引数を取ります。1 つは入力 xml ファイルで、もう 1 つは変換された出力 xml ファイルです。

しかし、コマンド プロンプトを使用して C# からこの python スクリプトを実行する方法がわかりません。この問題から抜け出すために私を導いてください...

よろしくお願いします、P.SARAVANAN

4

3 に答える 3

5

cmd.exeの実行が間違っていると思います。python.exe を実行するか、UseShellExecute を true に設定して main.py を実行する必要があると思います。

現時点では、cmd.exe が入力を待機しているため、コードは p.WaitForExit() でブロックされます。cmd.exe を終了させるには、exit と入力する必要があります。これをコードに追加できます:

p.StandardInput.WriteLine(@"exit");

しかし、cmd.exe を完全に切り取り、python.exe を直接呼び出すだけです。私が見る限り、cmd.exeは複雑さを追加しているだけで、まったくメリットがありません。

これらの行に沿って何かが必要だと思います:

var p = new Process();
p.StartInfo.FileName = @"Python.exe";
p.StartInfo.Arguments = "main.py input.xml output.xml";
p.StartInfo.WorkingDirectory = @"D:\python-source \mypgms";
p.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.Start();
p.WaitForExit();

また、Python スクリプトは、stdout ではなくファイルに出力するように見えます。したがって、 p.StandardOutput.ReadToEnd() を実行すると、そこには何もありません。

于 2012-04-21T07:15:19.550 に答える
2

アプリで IronPython をホストしてから、スクリプトを実行してみませんか?

http://blogs.msdn.com/b/charlie/archive/2009/10/25/hosting-ironpython-in-ac-4-0-program.aspx

http://www.codeproject.com/Articles/53611/Embedding-IronPython-in-aC-Application

于 2012-04-21T07:11:40.277 に答える
0

またはpy2exeを使用して、Pythonスクリプトをexeプログラムに実用的に変換します。

詳細手順...

  • py2exeをダウンロードしてインストールします。
  • main.py の input.xml と output.xml を c:\temp\ に置きます
  • setup.py を作成し、上記のフォルダーにも配置します

setup.py には以下が含まれている必要があります...

from distutils.core import setup
import py2exe

setup(console=['main.py'])

あなたのC#コードは...

var proc = new Process();
proc.StartInfo.FileName = @"Python.exe";
proc.StartInfo.Arguments = @"setup.py py2exe";
proc.StartInfo.WorkingDirectory = @"C:\temp\";
proc.Start();
proc.WaitForExit();

proc.StartInfo.FileName = @"C:\temp\dist\main.exe";
proc.StartInfo.Arguments = "input.xml output.xml";
proc.Start();
proc.WaitForExit();
于 2012-04-21T07:15:14.033 に答える