从webpy运行python脚本

时间:2010-02-28 22:04:59

标签: python web.py

我设置了lighttpd服务器以及webpy和fastcgi。我试图在每次访问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()

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

参见Python docs

中的解释和示例

答案 3 :(得分:0)

您正在寻找什么来查看您的操作产生的结果:

print proc.stdout.read()

Popen命令

之后