Мне нужно, чтобы скрипт CGI Python выполнял некоторые вещи (немного проверки безопасности), а затем в конечном итоге вызывая скрипт CGI Perl, передавая все, что он получил (например, POST info), на Perl-скрипт.Имейте Python CGI вызывать Perl CGI, передавая исходную информацию (чтобы ограничить поиск личных архивов Mailman для зарегистрированных пользователей)
На мой взгляд, причина в том, что я пытаюсь интегрировать Swish-поиск в архивы списков Mailman.
Swish поиска использует swish.cgi, сценарий Perl, а потому, что это список частных архивов я просто не могу позволить людям позвонить swish.cgi непосредственно в соответствии с рекомендациями на этой странице: http://wpkg.org/Integrating_Mailman_with_a_Swish-e_search_engine#Mailman_configuration
Я считаю, что я нужно сделать, чтобы «приватный» файл cgi-bin Mailman (написанный на Python) выполнял обычную проверку безопасности (которая вызывает несколько модулей Mailman/python), а THEN вызывает swish.cgi для выполнения поиска (после проверки того, что пользователь находится в списке рассылки).
По сути, я считаю, что самым простым решением было бы только защитить доступ к скрипту swish.cgi Perl с вариантом стандартного скрипта cgi-bin/private Python mailmanman.
(Я думал, что люди могут искать с незащищенным swish.cgi, и люди не смогут просмотреть полные результаты, потому что эти сообщения уже защищены паролем по умолчанию Mailman setup ... но проблема заключается в том, что даже показ отрывков из Swish в результатах поиска может привести к конфиденциальной информации, поэтому я должен ограничить доступ даже к самому поисковому запросу только подписчикам.)
Если у кого-то есть лучшее представление о том, как решить общую проблему проблема без выполнения Python-CGI-вызовов-Perl-CGI. Я с удовольствием рассмотрю этот «ответ».
Просто знайте, что моя цель - сделать небольшое (в идеале нет) изменение стандартной установки Mailman. Копирование «частного» скрипта cgi-bin (источник которого - mailman-2.1.12/Mailman/Cgi/private.py) и внесение изменений в вызов swish.cgi классно, но изменение существующего частного скрипта cgi-bin не будет действительно быть круто.
Вот что я сделал, чтобы проверить ответ (используя os.execv
заменить сценарий питона с помощью сценария Perl, так что сценарий 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 ребенка успешно унаследовал все переменные среды.
Почему бы не просто использовать интерфейс Python для Swish? http://pypi.python.org/pypi/Swish-E/0.5 – friedo
Это отличный второй вариант. Попытайтесь сначала просто вызвать swish.cgi, хотя для этого требуется меньше настраиваемого кодирования. swish.cgi поставляется с Swish и генерирует интерфейс поиска (поле запроса и параметры). Если бы я использовал интерфейс Python для Swish, я считаю, что мне придется все это повторить. Плюс, если мы обновим Swish в будущем, мы получим любые улучшения для swish.cgi автоматически. Но спасибо - если это (Python CGI вызывает swish.cgi Perl CGI) не работает, это отличный план резервного копирования! – Chirael