如图所示,我设置了两台Ubuntu PC并进行了连接,它们可以相互ping通。
PC1<========================>PC2
PC2上运行了apache2。我已经设置了如下所示的python脚本,以便在PC1使用PC2的IP向服务器发出请求时运行。
Python脚本工作正常并生成一个简单的网页,如下所示,但是我取消注释该行的那一刻
subprocess.call("./test.sh", shell=True)
运行bash脚本的代码,发生了两件事:
当我在PC2上本地运行./index.py
时,它会工作并执行bash脚本文件./test.sh
,如其中所示,因此也会执行提到的top
命令./test.sh
但是...
当我通过PC1请求时,apache2崩溃并在浏览器中显示以下内容:
内部服务器错误
服务器遇到内部错误或配置错误,无法完成您的请求。
请与网站管理员@ localhost上的服务器管理员联系,告知他们此错误发生的时间以及您在此错误发生之前执行的操作。
服务器日志中可能提供了有关此错误的更多信息。
localhost端口80上的Apache / 2.4.7(Ubuntu)服务器
错误日志文件包含以下详细信息:
[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
答案 0 :(得分:2)
在编写内容类型标头之前,您正在运行bash脚本。反过来做。
bash脚本写入与Python脚本相同的标准输出,因此Apache服务器看到的第一件事就是bash脚本的输出。该输出不是有效的HTTP标头,因此是错误消息。