0

私は Web 開発の初心者で、テキストを .txt ファイルに書き込む R スクリプトを呼び出す単純な mod_wsgi アプリを作成しようとしています。次に mod_wsgi がそのファイルを読み取り、Web ページに表示します。コマンド ラインで手動で実行すると Python と R コードが機能しますが、Web アプリと統合しようとすると、R スクリプトがまったく実行されないため、Web アプリが読み取るための .txt ファイルが生成されません。これが 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() に文字列を渡して、Bad Thing (tm) である shell=True を使用する必要があります。

また、例で行ったように、相対パスではなく絶対パスで入力スクリプトを指定する必要があります。

于 2012-07-23T18:11:52.367 に答える