apache可以运行不可执行的python脚本吗?

时间:2018-10-12 14:06:41

标签: python apache webserver chmod ubuntu-18.04

我设置了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 而不标记为可执行文件的文件吗?

2 个答案:

答案 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>")