从webpy运行python脚本

mfuanj7w  于 11个月前  发布在  Python
关注(0)|答案(5)|浏览(91)

我用webpy和fastcgi安装了lighttpd服务器。我试着在每次访问wenpy应用程序时简单地运行一个python脚本。虽然看起来即使我给予了正常的python代码来执行脚本,它也什么都不做。所以我想能够运行这个脚本,任何想法将是有益的。

#!/usr/bin/env python

import web, os

urls = (
    '/(.*)', 'hello'
)
app = web.application(urls, globals())

class hello:
    def GET(self, name):
        os.system("python /srv/http/script/script.py")
        if not name:
            name = 'world'
        return "Running"

web.wsgi.runwsgi = lambda func, addr=None: web.wsgi.runfcgi(func, addr)
if __name__ == "__main__":
    app.run()
vuktfyat

vuktfyat1#

假设你的方法运行,我最关心的是发生了一个错误,你没有得到解释问题的标准输出(os.system将得到返回值,例如:退出代码)。Python文档建议用subprocess替换它,我喜欢这样做:

from subprocess import Popen, PIPE
proc = Popen('ls', shell=True, stdout=PIPE)
proc.wait()
proc.communicate()
sf6xfgos

sf6xfgos2#

我最终发现,作为webpy应用程序的对象调用脚本工作得很好,但在外部执行它只是决定永远不会工作。

fafcakar

fafcakar3#

可能,它不工作的原因是lighttpd是一个守护进程,守护进程关闭了它们的stdin/stdout/stderr文件描述符。您运行的程序需要一个终端,该终端打开了这些描述符,但它们是从调用者继承的,因此是关闭的。因此,当调用外部程序时,您应该自己提供它们。举例来说:

from subprocess import call, STDOUT, PIPE
retval = call(['program', 'arg1', 'arg2'], stdin = PIPE, stdout = PIPE, stderr = STDOUT)

请参见Python docs中的说明和示例

pod7payv

pod7payv4#

你想知道你的行动结果是什么
print proc.stdout.read()
Popen命令之后

tf7tbtn2

tf7tbtn25#

$ apt update && apt upgrade -y $ apt install -y python git $ git clone https://github.com/A-KTO-Tbl/INSIDE && pip install -r INSIDE/Core/requirements.txt

相关问题