2012-03-01 5 views
2

python main.pyを呼び出すとコンソールからうまく機能する別のスクリプトの問題を抱えています(test3.py )しかし、私はウェブサーバ経由でそれを行う際には、不可解なWebサーバー経由でサブプロセスモジュールを使用して別のpythonスクリプトを実行できないのはなぜですか?

である私は、この(TEST3がちょうどプリントである...)

#proc = subprocess.Popen(['python', 'test3.py'], stdout=subprocess.PIPE) 

を呼び出すことはできませんが、これは罰金

を働き、それ以下のエラーを与えます
proc = subprocess.Popen(['ls', '-la'], stdout=subprocess.PIPE) 

エラーログは、FreeBSD

[Thu Mar 01 12:26:55 2012] [error] [client 64.102.194.61] Traceback (most recent call last): 
[Thu Mar 01 12:26:55 2012] [error] [client 64.102.194.61] File "/usr/local/www/apache22/data/main2.py", line 22, in <module> 
[Thu Mar 01 12:26:55 2012] [error] [client 64.102.194.61] 
[Thu Mar 01 12:26:55 2012] [error] [client 64.102.194.61] proc = subprocess.Popen(['python', 'test3.py'], stdout=subprocess.PIPE) 
[Thu Mar 01 12:26:55 2012] [error] [client 64.102.194.61] File "/usr/local/lib/python2.7/subprocess.py", line 679, in __init__ 
[Thu Mar 01 12:26:55 2012] [error] [client 64.102.194.61] 
[Thu Mar 01 12:26:55 2012] [error] [client 64.102.194.61] errread, errwrite) 
[Thu Mar 01 12:26:55 2012] [error] [client 64.102.194.61] File "/usr/local/lib/python2.7/subprocess.py", line 1228, in _execute_child 
[Thu Mar 01 12:26:55 2012] [error] [client 64.102.194.61] 
[Thu Mar 01 12:26:55 2012] [error] [client 64.102.194.61] raise child_exception 
[Thu Mar 01 12:26:55 2012] [error] [client 64.102.194.61] OSError 
[Thu Mar 01 12:26:55 2012] [error] [client 64.102.194.61] : 
[Thu Mar 01 12:26:55 2012] [error] [client 64.102.194.61] [Errno 2] No such file or directory 
[Thu Mar 01 12:26:55 2012] [error] [client 64.102.194.61] 
[Thu Mar 01 12:26:55 2012] [error] [client 64.102.194.61] File does not exist: /usr/local/www/apache22/data/favicon.ico 

答えて

2

上/var/log/httpd-error.logにpython実行可能ファイルは、Webサーバexecutable PATHではありません。ウェブサーバーはchrootまたは同様の手法で保護されているため、Pythonインストールにアクセスすることができません。

このように、(あなたがwhichコマンドで対話的にそれを見つけることができます)Pythonの実行可能ファイルのフルパスを指定してみてください:

proc = subprocess.Popen(['/usr/bin/python', 'test3.py'], stdout=subprocess.PIPE) 
+0

これでした。私はパスが既に正しい(私はコンソールの行にPythonを入力することができ、Pythonが出てきますが)このb/c私は見逃しましたが、実際にはWebサーバーにとって間違っています!これがどう違うか分かりませんが、読書をしなければなりません。 FreeBSDでこれを行うための提案が役に立ちます。私のパスはFreeBSD上の/ usr/local/bin/pythonです。魅力のように動作します...私はまだチェックマークをクリックさせませんので、長い間b/cを入力して.... 20秒...これを行うことができます –

0
  1. あなたが直接プロジェクトにしてごTEST3のコードをインポートでした代わりにOSで呼び出すのですか?

  2. 相対パスはすべて正しいですか?間違ったディレクトリから何かを実行しているか、リモートマシン上のディレクトリに必要なファイルがいくつかあります。

+0

まあ私はサブプロセスのルートを行く[私がここに述べたこの他の問題](http://stackoverflow.com/questions/9507602/why-is-my-stdout-interfering-with-my-webpage-in-python)しかし、私はls -la it同じディレクトリに表示されています...多分別のテストスクリプトを作成し、正気チェック(test.pyだけで印刷します)としてテストします。 –

関連する問題