python - 在控制台和wsgi应用程序中的不同行为

时间:2014-11-01 05:03:35

标签: python background-process popen

我在Windows Server 2008中设置了python,我使用cherrypy和wsgi。

首先,我有一个只在Windows上运行的数学程序。我可以将带有命令的文件传递给该程序:

#file.txt
sum(2+2)
writeinfile("output.txt")

#in cmd/powershell
C:\>PATH_TO_FOLDER\program.exe file.txt

#that outputs some lines in console
... compiling
... solving
... saving

然后我得到了具有正确结果的输出文件。我也可以使用此程序提供的ODBC方法从DB读取值,如下所示:

#file2.txt
values = ODBC()
sum(values)
writeinfile("output2.txt")

#in cmd/powershell
C:\>PATH_TO_FOLDER\program.exe file2.txt

#also outputs the lines mentioned in the first example

这也有效。所以我决定通过网络浏览器填写这个txt文件。为了做到这一点,我在控制台

中测试了之前提到的命令
>>> from subprocess import Popen, PIPE
>>> program = "C:\\PATH_TO_FOLDER\\program.exe"
>>> txt = "C:\\PATH_TO_FILE\\file2.txt"
>>> print Popen([program, txt], shell=True, stdout=PIPE).stdout.read()
  ... compiling
  ... solving
  ... saving

它还会生成" output2.txt",所以它似乎按预期工作。知道了这一点,我使用了cherrypy来在我的浏览器中找到一些东西:

from subprocess import Popen, PIPE
import cherrypy

class Solver(object):
    @cherrypy.expose:
    def process_solver(self):
        program = "C:\\PATH_TO_FOLDER\\program.exe"
        txt = "C:\\PATH_TO_FILE\\file2.txt"
        p = Popen([program, txt], shell = True, stdout = PIPE)
        return p.stdout.read()

application = cherrypy.Application(Solver(), script_name = None, config = None)

当我去http:/localhost/process_solver时,我只能得到以下内容:

... compiling

但文件" output2.txt"已被创造......内心没什么。

那么,为什么会这样呢?为什么控制台的行为方式和我的脚本在其他方面?

提前致谢

0 个答案:

没有答案