Python CGIスクリプトにいくつかの処理(セキュリティチェックを少し行う)を行わせてから、Perl CGIスクリプトを呼び出して、受け取ったもの(POST情報など)をPerlスクリプトに渡す必要があります。
背景として、これを行う理由は、Swish検索をMailmanリストアーカイブと統合しようとしているためです。
Swish検索はPerlスクリプトであるswish.cgiを使用しますが、これらはプライベートリストアーカイブであるため、このページで推奨されているように、swish.cgiを直接呼び出すことを許可することはできません:http ://wpkg.org/Integrating_Mailman_with_a_Swish-e_search_engine#Mailman_configuration
私がする必要があるのは、Mailmanの「プライベート」cgi-binファイル(Pythonで記述)に定期的なセキュリティチェック(いくつかのMailman / pythonモジュールを呼び出す)を実行させてから、swish.cgiを呼び出して検索を実行することです(ユーザーがメーリングリストに登録されていることを確認した後)。
基本的に、最も簡単な解決策は、標準のmailman cgi-bin /privatePythonスクリプトのバリアントを使用してswish.cgiPerlスクリプトへのアクセスを保護することだと思います。
(私は人々が保護されていないswish.cgiで検索でき、それらの投稿はデフォルトのMailman設定ですでにパスワードで保護されているため、完全な結果を表示できないという考えを検討しました...しかし問題はそれです検索結果にSwishの投稿の抜粋を表示しても機密情報が公開される可能性があるため、検索自体へのアクセスもサブスクライバーのみに制限する必要があります。)
Python-CGI-calls-Perl-CGIを実行せずに全体的な問題を解決する方法について誰かがより良いアイデアを持っている場合、私はその「答え」を喜んで検討します。
私の目標は、標準のMailmanインストールにほとんど(理想的には)変更を加えないことです。「プライベート」cgi-binスクリプト(ソースはmailman-2.1.12 / Mailman / Cgi / private.py)をコピーし、swish.cgiを呼び出すように変更するのはクールですが、既存のプライベートcgi-binスクリプトを変更しても効果はありません。本当にかっこいい。
これが答えをテストするために私がしたことです(os.execv
perlスクリプトがpythonスクリプトの環境を継承するように、pythonスクリプトをperlスクリプトに置き換えるために使用します):
私は次のコマンドでpythontestスクリプトを作成しました。
import os
os.environ['FOO'] = 'BAR'
mydir = os.path.dirname(os.environ.get('SCRIPT_FILENAME'))
childprog = mydir + '/perltest'
childargs = []
os.execv(childprog, childargs)
次に、次のようなperltestスクリプトを使用します。
print "Content-type: text/html\n\n";
while (($key,$value) = each %ENV) {
print "<p>$key=$value</p>\n";
}
次に、http://myserver.com/cgi-bin/pythontestを呼び出し、環境の印刷出力にカスタムFOO変数が含まれているため、子perltestプロセスがすべての環境変数を正常に継承していることを確認しました。