无法使用python3从apache2服务器运行bash脚本?

时间:2016-02-10 16:20:28

标签: python linux bash apache shell

如图所示,我设置了两台Ubuntu PC并进行了连接,它们可以相互ping通。

PC1<========================>PC2

PC2上运行了apache2。我已经设置了如下所示的python脚本,以便在PC1使用PC2的IP向服务器发出请求时运行。

Python脚本工作正常并生成一个简单的网页,如下所示,但是我取消注释该行的那一刻

subprocess.call("./test.sh", shell=True)

运行bash脚本的代码,发生了两件事:

  1. 当我在PC2上本地运行./index.py时,它会工作并执行bash脚本文件./test.sh,如其中所示,因此也会执行提到的top命令./test.sh

    但是...

  2. 当我通过PC1请求时,apache2崩溃并在浏览器中显示以下内容:

      

    内部服务器错误

         

    服务器遇到内部错误或配置错误,无法完成您的请求。

         

    请与网站管理员@ localhost上的服务器管理员联系,告知他们此错误发生的时间以及您在此错误发生之前执行的操作。

         

    服务器日志中可能提供了有关此错误的更多信息。

         

    localhost端口80上的Apache / 2.4.7(Ubuntu)服务器

  3. 错误日志文件包含以下详细信息:

    [Wed Feb 10 21:40:51.866832 2016] [cgi:error] [pid 9747] [client   
    
    127.0.0.1:34506] malformed header from script 'index.py': Bad header:   
    THIS COMES FROM TEST
    [Wed Feb 10 21:40:51.867920 2016] [cgi:error] [pid 9747] [client  
    127.0.0.1:34506] AH01215: TERM environment variable not set.
    

    Python脚本./index.py如下:

    #!/usr/bin/python
    
    import subprocess
    subprocess.call("./test.sh", shell=True)
    
    # Turn on debug mode.
    import cgitb
    cgitb.enable()
    
    # Print necessary headers.
    print("Content-Type: text/html\n")
    
    
    
    
    print('<html>')
    print('<head>')
    print('<title>IoT Based Electric SubStation Monitoring</title>')
    print('</head>')
    print('<body>')
    print('</br>')
    print('<marquee><b><h1>IoT Based Electric SubStation Monitoring</h1> 
    </b></marquee>')
    
    print(' <button type="button">Click here to STOP</button> ')
    print('</body>')
    print('</html>')
    

    bash脚本./test.sh如下:

    #!/bin/bash
    #echo THIS COMES FROM TEST
    firefox
    #echo STOPPPPPPPPPPPPPPPPPPPP
    

1 个答案:

答案 0 :(得分:2)

在编写内容类型标头之前,您正在运行bash脚本。反过来做。

bash脚本写入与Python脚本相同的标准输出,因此Apache服务器看到的第一件事就是bash脚本的输出。该输出不是有效的HTTP标头,因此是错误消息。