0

この cgi スクリプトにデータを送信するページがあり、このスクリプトは別の実行可能ファイルを呼び出します。問題は、この実行可能ファイルの実行に非常に長い時間がかかり、その結果、cgi スクリプトが終了するまで停止することです。バックグラウンドで実行する方法を見つけようとしています。LinuxマシンでPythonでコーディングしています。私が直面している問題は、スクリプトが終了すると (親プロセスが強制終了される)、子プロセスも init によって終了されることです (Linux 仕様に従って)。少しググったところ、このスレッドに出くわしました: Python で外部コマンドを呼び出す

次に、コードで次のことを試しました。

print <html code>
pid = subprocess.Popen([sys.executable, '/path/to/executable.py '+arg1],
                       stdout=subprocess.PIPE, stderr=subprocess.PIPE, 
                       stdin=subprocess.PIPE)
...
retval = pid.wait()
#For debugging purposes:
print str(retval) + "<br/>"
print </html code>

これにより、「2」の retval が返されますが、これは何かが間違っていることを意味していると確信しています (正しい出力が表示されないため) 他の方法をいくつか試しましたが、スクリプトを実行し、ロードに時間がかかりますフォアグラウンドで実行されている)、または単にスクリプトを一緒に実行するのに失敗しただけです。

アイデア?ありがとうございました。ああ、ところで、私はpython 2.6を使用しています

4

1 に答える 1

0

解決策は、スクリプトが終了する前に何らかの出力を生成することです。私としては、チャンク転送エンコーディングを使用してスクリプト実行ログを出力するのが最善の方法です。

通常、CGI スクリプト出力は、出力を開始する前に完全に生成する必要があります。これは、「Content-Length」ヘッダーを計算するために必要です。チャンク転送エンコーディングはこれを回避します。出力チャンクへの応答全体を知る必要はありません。

于 2012-06-26T20:23:29.680 に答える