복붙노트

[PYTHON] 아파치 2에서 파이썬 스크립트 실행하기

PYTHON

아파치 2에서 파이썬 스크립트 실행하기

Apache를 사용하여 Python 프로그램을 실행하려고합니다. 그러나 Apache는 파일을 제공하고 실제로 실행하지 않습니다. 파일에 대한 사용 권한은 r / w / x이며 / var / www에 있습니다. 나는 httpd.conf의 내용과 프로그램 코드를 게시 할 것이다. 또한 파이썬 스크립트를 .cgi 파일로 실행하려고 시도했지만 제대로 작동하지 않았습니다. mod_python과 mod_wsgi 모듈을 모두 아파치에로드했습니다.

파이썬 샘플 :

#!/usr/bin/python

# enable debugging
import cgitb
cgitb.enable()

print "Content-Type: text/plain\r\n\r\n"
print

print "Hello World!"

httpd.conf :

AddHandler cgi-script .cgi .pl
AddHandler python-program .py

나는 작은 httpd.conf 파일을 알고 있지만 아파치를 설치할 때 파일에 아무것도 없다. 나는 이것이 단지 아파치로 파이썬을 돌리는 기초를 배웠다는 것을 언급해야한다. 그것은 생산을위한 것이 아닙니다. 도와 주셔서 감사합니다!

내가 사용하고있는 OS는 Ubuntu 10.04이고 아파치 버전은 2입니다. #! / usr / bin / env 파이썬이 호출 될 때 자동으로 사용되는 파이썬 버전 2.6이 있습니다. 두 가지 주요 오류가 발생합니다. 첫 번째는 파일과 폴더의 사용 권한이 777이지만 파일이 발견되지 않는다는 것입니다. 로그의 오류는 다음과 같습니다.

[Sun Feb 05 13:29:44 2012] [error] [client 192.168.1.3] File does not exist: /var/www/poit-0.1

이 오류는 작성하지 않은 다른 파이썬 스크립트에 대한 것입니다. 이상한 것은 브라우저 창에서 액세스 할 때 폴더의 색인에 파일이 표시된다는 것입니다. 그러나 파일을 탐색 할 때 위의 오류가 발생합니다.

내가 얻는 또 다른 오류는 헤더의 조기 말미입니다. 오류는 다음과 같습니다.

[Sun Feb 05 12:10:19 2012] [error] (8)Exec format error: exec of '/var/www/pyth.py' failed
[Sun Feb 05 12:10:19 2012] [error] [client 192.168.1.3] Premature end of script headers: pyth.py

해결법

  1. ==============================

    1.httpd.conf : AddHandler cgi-script .cgi .pl의 첫 번째 줄은 펄 스크립트가 아닌 파이썬 스크립트를 테스트하기 때문에 무의미합니다. 그리고 당신은 파이썬 스크립트의 위치 내에서 그 지시어들을 정의해야하고 아파치에게 그 위치에있는 cgi 스크립트들을 실행해야한다고 말한다 : Options + ExecCGI. 이 스 니펫은 시작일 것입니다.

    httpd.conf : AddHandler cgi-script .cgi .pl의 첫 번째 줄은 펄 스크립트가 아닌 파이썬 스크립트를 테스트하기 때문에 무의미합니다. 그리고 당신은 파이썬 스크립트의 위치 내에서 그 지시어들을 정의해야하고 아파치에게 그 위치에있는 cgi 스크립트들을 실행해야한다고 말한다 : Options + ExecCGI. 이 스 니펫은 시작일 것입니다.

    <Directory /path/to/sample.py />
      Options +ExecCGI
      AddHandler cgi-script .py
    </Directory>
    

    부록 1 :

    마지막으로 언급 한대로이 스크립트를 사용해보십시오. 그것은 cgi 환경에 대한 정보를 뱉어 야합니다.

    #!/usr/bin/python
    import cgi
    cgi.test()
    

    부록 2 :

    위의 구성으로 스크립트를 작성했습니다. 문제는 스크립트가 python2로 작성되었다는 것입니다. 그리고 기본 인터프리터 아파치는 스크립트를 실행하기 위해 python3을 호출합니다 (적어도 제 경우에는 가능합니다. 그리고 이것은 당신도 마찬가지입니다).

    이것은 hello world 스크립트의 python3 버전입니다 :

    #!/usr/bin/env python
    
    # enable debugging
    import cgitb
    cgitb.enable()
    
    print("Content-Type: text/plain;charset=utf-8")
    print()
    
    print("Hello World!")
    

    부록 3 :

    첫 번째 오류의 경우 배포하려는 디렉토리와 파일의 권한과 소유권이 올바르게 설정되었는지 확인하십시오. 그리고 httpd.conf에 지시어를 추가하십시오.

    Order allow,deny
    Allow from all
    

    어느 것이 당신에게 이것을 줄 것입니다 :

    <Directory /path/to/sample.py />
      Options +ExecCGI
      AddHandler cgi-script .py
      Order allow,deny
      Allow from all
    </Directory>
    

    두 번째 오류의 경우, 제가 뭔가를 놓치지 않으면 아파치가 스크립트를 실행하기 위해 파이썬 3 인터프리터를 호출하는 것처럼 보입니다. 이러한 가능성을 배제하기 위해 다음을 시도해보십시오.

    ls -al /usr/bin/python*
    

    그러면 시스템에서 사용할 수있는 파이썬 인터프리터 목록이 표시됩니다. 둘 이상의 통역사가있는 경우이 출력과 비슷한 것을 얻을 수 있습니다 :

    /usr/bin/python -> python3*
    /usr/bin/python2.6*  
    /usr/bin/python3*  
    

    그렇지 않다면, 다음과 같은 출력이 될 것입니다.

    /usr/bin/python -> python2.6*
    /usr/bin/python2.6*  
    

    이것이 문제가 아닌지 확인하려면이 수정 된 샘플 스크립트를 사용해보십시오.

    #!/usr/bin/python2.6
    
    # enable debugging
    import cgitb
    cgitb.enable()
    
    print "Content-Type: text/plain\r\n\r\n"
    print
    
    print "Hello World!"
    

    아파치가 호출해야하는 통역자 버전을 명시 적으로 언급했음을 알게 될 것이다. 이는 추한 것이다. 그러나 테스트를 위해서, 당신은 그것을 할 수 있습니다. 물론 #! / usr / bin / python2.6을 서버에있는 바이너리로 매핑하고, 파이썬 3 호환 코드와 파이썬 2 인터프리터를 섞어서는 안된다.

  2. ==============================

    2.Re : Exec 형식 오류.

    Re : Exec 형식 오류.

    나는 전에이 두 번 나 자신을 두 번이나 뛰어 다녔다. 나는 똑같은 (비밀) 오류 메시지를 가졌다.

    필자는 Windows 컴퓨터에서 Notepad ++의 CGI를 통해 Python (3) 스크립트를 개발하고이를 Linux 서버에 업로드했습니다.

    많은 좌절감을 느낀 끝에이 문제는 줄 끝과 관련이 있으며 Windows 줄 끝 (\ r \ n)을 UNIX 줄 끝 (\ n)으로 변환해야한다는 것을 알게되었습니다.

    메모장 ++ (6.1.5)에서는 편집 메뉴로 이동하여 EOL 변환 옵션을 선택한 다음 파일을 저장하면됩니다.

  3. ==============================

    3.** apache2 버전 2.4

    ** apache2 버전 2.4

    sudo apt-get install python
    sudo apt-get install apache2
    

    ==== 이전 섹션에 주석을 달고 아래 코드를 추가하십시오 :

    ScriptAlias /cgi-bin/ /var/www/cgi-bin/
    <Directory "/var/www/cgi-bin">
    AddHandler cgi-script .py
    AllowOverride None
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
    </Directory>
    

    =========================================

    <Directory "/var/www/cgi-bin">
    AllowOverride None
    Options ExecCGI
    Order allow,deny
    Allow from all
    </Directory>
    
    <Directory "/var/www/cgi-bin">
    Options All
    </Directory>
    
    <Directory /usr/local/apache2/cgi-bin>
    Require all granted
    </Directory>
    

    노트!

    use for apache2.4 
      file python keep in directory: /var/www/cgi-bin/
      You can test :go to http://localhost/cgi-bin/<namefile>.py
    

    추천 https://www.linux.com/blog/configuring-apache2-run-python-scripts

  4. ==============================

    4.제 경우에는 사소한 문제였습니다. 이 줄을 추가해야했습니다.

    제 경우에는 사소한 문제였습니다. 이 줄을 추가해야했습니다.

    #!/usr/bin/python3
    

    .py 파일의 맨 위에서 실행하고 싶었습니다.

    그런 다음 모든 것이 제대로 작동하기 시작했습니다.

  5. ==============================

    5.나는 동일한 증상을 보였고 나의 설정은 위의 대답과 비교해 보았다.

    나는 동일한 증상을 보였고 나의 설정은 위의 대답과 비교해 보았다.

    새 설치가 mod_cgi.so를로드하도록 구성되지 않았 음을 발견했습니다.

    필요한 모듈을로드하는 것은 이와 같이 보입니다. 서버를 다시 시작하면 파일을 찾을 수 없다는 오류가 표시되므로 파일이 경로를 적절하게 조정하는 위치를 파악하십시오.

    LoadModule cgi_module 모듈 / mod_cgi.so

  6. ==============================

    6.파이어 폭스를 사용하고 있다고 가정합니다. 파이어 폭스 애드온 (firefox addons)이 컴퓨터에 설치된 것과 관련이있을 수있는 그물을 다른 곳에서 읽었다.

    파이어 폭스를 사용하고 있다고 가정합니다. 파이어 폭스 애드온 (firefox addons)이 컴퓨터에 설치된 것과 관련이있을 수있는 그물을 다른 곳에서 읽었다.

    이 오류가 발생하고 firefox 20을 사용합니다. Opera로 전환하면 더 이상 오류가 발생하지 않으며 python 스크립트가 정상적으로 실행되는 것 같습니다.

    편집 : 실제로 내 실패를 일으킨 스크립트의 결과에 "("및 ")"을 추가 한 간과했던 eval () 메서드 호출이었습니다. 일단 내가 그들을 제거, 그것은 나를 위해 일했다.

    나는 당신이 자바 스크립트 나 HTML을 게시하지 않았거나 처음에 스크립트를 호출하기 위해 사용하는 것이 무엇이든간에 알아 챘다. 아마도 우리를 위해 게시 할 수 있습니까? 직접 복사 한 것을 보지 않고 블로그 사이트에서 직접 복사 / 붙여 넣기 예제를 만들었습니다. 그건 내 잘못이야.

  7. from https://stackoverflow.com/questions/9145517/executing-a-python-script-in-apache2 by cc-by-sa and MIT license