0

最初に、これはこれの一部です(多少):Running a python script on C# not working

私の python スクリプトは、想定どおりにコマンド ラインから正しく実行されますが、コンソール アプリケーションから実行すると、正しく実行されません。

私のpythonスクリプトは、ディレクトリからすべての.logファイルを取得し、それらをcsvファイルにパスすると想定しています。次に、C# コンソール アプリケーションから csv ファイルにアクセスしたいと考えています。Pythonスクリプトを実行すると、ファイルが作成されて終了します。それ以上は何もしません。

Pythonスクリプトを実行しようとするために使用しているコードは次のとおりです。(私は IronPython を使用していませんし、使用したくありません)。

    public void runPythonScript()
    {
        ProcessStartInfo startInfo = new ProcessStartInfo("python");
        startInfo.CreateNoWindow = true;
        startInfo.UseShellExecute = false;
        startInfo.FileName = @"C:\Python27\python.exe";
        startInfo.Arguments = @"C:\Users\bmahnke\Desktop\Python-Files\python3.py";  

        try
        {
            using (Process prog = Process.Start(startInfo))
            {

                prog.WaitForExit();
            }
        }
        catch(Exception e)
        {
            Console.WriteLine(e.Message);
        }

    }
4

1 に答える 1

0

あなたは私たちに先に進むために多くを与えていません。別のプログラムから Python スクリプトを実行すると、コンソールから実行した場合とは異なる動作が発生する可能性がある理由を次に示します。

異なる環境

プロセスは通常、作成時に親のすべての環境変数のコピーを継承します。Python プロセスがコンソール シェル プロセスから継承する環境変数は、それを起動したものから継承した C# プログラムから継承したものとは異なる場合があります。チェックする重要な変数は、PATH (作業ディレクトリ)、PYTHONPATH、PYTHONHOME、PYTHONUNBUFFERED、およびスクリプトが具体的に読み取るすべてのものです。

リダイレクトされた stdin、stdout、stderr

標準のファイル記述子は、コンソールに接続されているか、ファイルに接続されているか、別のプロセスにパイプされているかによって、動作が異なる場合があります。

コンソールの存在

コンソールが接続されていなくても、プログラムでプロセスを開始することができます。子プロセスにコンソールがまったくなく、その標準ファイル記述子をリダイレクトしていない場合、子プロセスが読み書きしようとするとクラッシュする可能性があります。

編集-コンソールベースのPythonスクリプトを呼び出すwin32 C#プログラムを作成してこれを試しましたが、クラッシュを再現できませんでした-Pythonからのコンソール出力がエーテルに消えます。以前にこれに問題があったことを覚えていると思いますが、どのような要因の組み合わせが問題を引き起こす可能性があるかはわかりません. 調査する価値はあるかもしれませんが、それがあなたの問題を引き起こしているとは確信できませんでした.

于 2013-02-20T15:29:53.670 に答える