0

我是 Web 开发的新手,我正在尝试创建一个简单的 mod_wsgi 应用程序,该应用程序调用一个 R 脚本,该脚本会将一些文本写入 .txt 文件,然后 mod_wsgi 读取该文件并将其显示在网页上。当我在命令行手动执行时,python 和 R 代码可以工作,但是当我尝试将它与我的 Web 应用程序集成时,它根本不执行 R 脚本,因此不会生成 .txt 文件供 Web 应用程序读取。这会导致 500 错误。

我正在使用 os.system() 将一些命令行参数传递给 R 脚本,但就像我之前所说的,R 脚本没有被执行:

a=2
b=3    
commandString = "/home/usr/bin/R --no-save --quiet --slave --args " + str(a) + " " + str(b) + " <webcalc.R"
os.system(commandString)
f=open('/home/usr/webapps/simple/htdocs/prob.txt','r')  #This is the file that the R script was supposed to write.
prob=f.read(2)
prob=str(prob)+'%'
f.close()

我正在使用 Apache 服务器。这是我从错误日志中得到的确切错误:

[Mon Jul 23 17:45:42 2012] [error] [client 127.0.0.1] mod_wsgi (pid=10367): Exception occurred processing WSGI script '/home/usr/webapps/simple/htdocs/index.py'.
[Mon Jul 23 17:45:42 2012] [error] [client 127.0.0.1] Traceback (most recent call last):
[Mon Jul 23 17:45:42 2012] [error] [client 127.0.0.1]   File "/home/usr/webapps/simple/htdocs/index.py", line 88, in application
[Mon Jul 23 17:45:42 2012] [error] [client 127.0.0.1]     f=open('/home/usr/webapps/simple/htdocs/prob.txt','r')
[Mon Jul 23 17:45:42 2012] [error] [client 127.0.0.1] IOError: [Errno 2] No such file or directory: '/home/usr/webapps/simple/htdocs/prob.txt'
[Mon Jul 23 17:45:42 2012] [error] [client 127.0.0.1] File does not exist: /home/usr/webapps/simple/htdocs/favicon.ico

我确信这是一个非常简单的问题,但我无法在任何地方找到解决方案。我真的很感激你能给我的任何帮助。

4

1 回答 1

0

重要提示:这不受恶意输入的保护

import subprocess
a=2
b=3
commandString = "/home/usr/bin/R --no-save --quiet --slave --args " + str(a) + " " + str(b) + " < /path/to/webcalc.R"
# This is BAD PRACTICE, but necessary in this instance,
# if my assumptions of R are correct.
retval = subprocess.call(commandString, shell=True)

除非您的 R 解释器(或其他任何解释器)可以直接接受文件名而不是使用输入重定向,否则您必须将字符串传递给 subprocess.call() 并使用 shell=True,这是一个坏事 (tm)。

您还应该通过绝对路径而不是相对路径来指定输入脚本,就像我在示例中所做的那样。

于 2012-07-23T18:11:52.367 回答