4

次の方法で C# から python スクリプトを実行しようとしています。

int ExitCode;
ProcessStartInfo ProcessInfo;
Process Process;

ProcessInfo = new ProcessStartInfo();
ProcessInfo.FileName = "C:\Python27\python.exe";
ProcessInfo.Arguments = "C:\generate.py book1.pdf";
ProcessInfo.CreateNoWindow = true;
ProcessInfo.UseShellExecute = false;
ProcessInfo.RedirectStandardOutput = true;

Process = Process.Start(ProcessInfo);
Process.WaitForExit();
ExitCode = Process.ExitCode;
Process.Close();

サーバーでこれを実行すると、ExitCode が 1 になります。しかし、同じコードがローカルで正常に動作しています。

また、cmd プロンプトからこのコマンドを実行すると、python スクリプトは問題なく実行されます。

この python スクリプトは実際に、PDF ページを SWF ファイルに変換し、ページからテキストを抽出し、さまざまなオープン ソースを使用して pdg ページのサムネイルを作成するために使用されています。

上記のC#コードの問題点を理解するのを手伝ってもらえますか、またはサーバーに権限を設定する必要がありますか?

前もって感謝します、

4

1 に答える 1

2

ここから、エラー コード 2 は を表すためERROR_FILE_NOT_FOUND、パス/ファイルのアクセス許可に問題があるはずです。

まず、Python プロセスから stdout と stderr を読み取るだけで、そこから情報が得られるかどうかを確認できます。

    ProcessInfo.RedirectStandardOutput = true;
    ProcessInfo.RedirectStandardError = true;
    // (...)
    Process.WaitForExit();
    string stderr = Process.StandardError.ReadToEnd();
    string stdout = Process.StandardOutput.ReadToEnd();
    Console.WriteLine("STDERR: " + stderr);
    Console.WriteLine("STDOUT: " + stdout);

おそらく、WriteLine は情報を表示する最良の方法ではないため、ニーズに合わせて調整します (その情報をログに記録する、一時ファイルに書き込むなど)。

また、C# でプログラミングする方法もほとんど知りませんが、あなたのようなプログラムを作成しようとすると、パスがエスケープされていないためにエラーが発生しました。したがって、\ を \\ に置き換えることもできます。

ProcessInfo.FileName = "C:\\Python27\\python.exe";
ProcessInfo.Arguments = "C:\\generate.py book1.pdf";

幸運を。

編集

エラー コード (1) をコメント (2) の他のコードと混同していることに気付きましたが、これらのヒントは引き続き役立つ可能性があります。

于 2013-04-12T20:50:13.340 に答える