我在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"已被创造......内心没什么。
那么,为什么会这样呢?为什么控制台的行为方式和我的脚本在其他方面?
提前致谢