Em bash, o que é a maneira mais simples de lighttpd configure para chamar um script python local com base em uma URL particular?

StackOverflow https://stackoverflow.com/questions/1403672

  •  05-07-2019
  •  | 
  •  

Pergunta

Em bash, o que é a maneira mais simples de lighttpd configure para chamar um script python local enquanto passando quaisquer pares de cadeia de consulta ou nome de valor incluídas com o URL como uma opção de linha de comando para o aplicativo python local para análise?

Example:
www.myapp.com/sendtopython/app1.py?Foo=Bar
results in the following occurring on the system. 
>python app1.py Foo=Bar

www.myapp.com/sendtopython/app2.py?-h
results in the following occurring on the system. 
>python app2.py –h

Aqui está um exemplo lighttpd instalar e script de configuração.

#!/bin/bash
# Install and configure web console managed by lighttpd
# Suggested Amazon EC2 AMI : ami-0d729464
#
# The console installed into /opt/web-console and 
# available on the http://_the_server_dns_/web-console

set -e -x
export DEBIAN_FRONTEND=noninteractive

function die()
{
    echo -e "$@" >> /dev/console
    exit 1
}

apt-get update && apt-get upgrade -y
apt-get -y install python
apt-get -y install unzip
apt-get -y install lighttpd

# web directory defaults to /var/www. 
WEBDIR=/var/www/logs
mkdir $WEBDIR || die "Cannot create log directory."

PYTHON=`which python`
echo $?
if [ ! $? ]
then
echo "Python interpreter not installed or not found in system path!!!" >> /dev/console
echo "Exiting setup-instance..."
exit 1
fi

#Download web-console 
FILE_DOWNLOAD_URL=http://downloads.sourceforge.net/web-console/web-console_v0.2.5_beta.zip
wget $FILE_DOWNLOAD_URL -O web-console.zip || die "Error downloading file web-console.zip"

# Install the web-console
INSTALL_DIR=/opt/web-console

mkdir $INSTALL_DIR
unzip -u -d $INSTALL_DIR web-console.zip || die "Error extracting web-console.zip"
chown www-data:www-data $INSTALL_DIR

# Configure lighttpd
cat > $INSTALL_DIR/webconsole.conf <<EOF
server.modules  += ( "mod_cgi" )
alias.url       += ( "/web-console/wc.pl" => "/opt/web-console/wc.pl" )
alias.url       += ( "/web-console/" => "/opt/web-console/wc.pl" )
\$HTTP["url"] =~ "^/web-console/" {
        cgi.assign = ( ".pl" => "/usr/bin/perl" )
}
EOF

ln -s $INSTALL_DIR/webconsole.conf /etc/lighttpd/conf-enabled/
/etc/init.d/lighttpd force-reload

exit 0
Foi útil?

Solução

Mh, por uma coisa que eu não iria mexer com o script de instalação, mas executá-lo uma vez e, em seguida, editar o arquivo de configuração lighttpd resultante (webconsole.conf no seu caso).

Você, então, precisa registrar scripts Python para CGI, como é feito para Perl no script de instalação. Você pode adicionar uma linha

cgi.assign = ( ".py" => "/usr/bin/python" )

sob a linha pl correspondente que faria Python outra opção CGI para o / web-console / caminho (veja-se os docs lighttpd se você deseja registrar .py como CGI em qualquer path) .

Em seguida, o Python app1.py script CGI, app2.py, ... tem que cumprir com a especificação CGI, que se me lembro correclty passa parâmetros de URL como variáveis ??de ambiente. Então você não pode simplesmente usar sys.argv. Tenho certeza de que há um módulo Python que faz a extração de parâmetros para você. (Em Perl, módulo CGI do Lincoln Stein é capaz de ambos os env e comando args de linha, mas não tenho certeza sobre Python).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top