我设置了Ubuntu服务器18.04 LTS,LAMP和mod_mono(顺便说一句,现在它可以与PHP一起很好地工作。)python也可以工作。首先,它给出了HTTP“内部服务器错误”消息。 sudo chmod +x myfile.py
修复了此错误,并且python生成的代码正常显示。但是,只要从文件中删除了执行权限(例如通过上传文件的新版本),执行位就会被剥夺并再次中断。
使用incrontab实现了一种变通方法,其中监视cgi-bin文件夹中的更改,并且任何新写入都导致对chmod +x %f
的运行。这工作了一段时间,然后停止了,这似乎是最好的解决方案。 Perl,PHP甚至ASPX都不需要标记为可执行文件-只需python。
Apache可以通过任何方式“运行” python 而不标记为可执行文件的文件吗?
答案 0 :(得分:0)
PHP起作用的原因是因为解释器已加载到Apache中。因此Apache解释了代码。
对于您的Python,它作为CGI运行,因此解释器位于Apache之外。
在Python脚本中,您可能有#!/usr/bin/python
第一行(或类似内容)。这告诉脚本使用此解释器运行。这需要对.py
文件具有可执行权限,并允许您直接调用myfile.py
。
请像这样运行它:/usr/bin/python myfile.py
。这样,解释器便是可执行文件,它将作为代码运行myfile.py。
示例
您要“单独”运行py文件:
file.py
#!/usr/bin/python
print("Hello")
Running it:
./file.py
您想通过python可执行文件运行它,就像您要通过Apache来运行
:file.py
print("Hello")
Running it:
/usr/bin/python file.py
答案 1 :(得分:0)
如果没有在.py文件中设置执行位,我认为Apache无法提供执行的python脚本的功能。
但是这是一种变通方法:只需将该文件标记为可执行,但是import
保留第二个python文件。该第二个文件不需要标记为可执行。
myfile.py(标记为可执行文件和只读文件-与apache一起使用):
#!/usr/bin/python3
# enable debugging
# helper to run the other, non-executable file
# do not add .py to the import "filename"
import myfile2
myfile 2 .py(仅标记为RW,可自由编辑此文件):
# this is the code which can change frequently
# and does not need to be marked executable...
print("Content-type: text/html\n\n")
print("<html><head><title>Python</title></head>")
print("<body>Hello, World!</body></html>")