2012-03-01 49 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) 

錯誤日誌中/var/log/httpd-error.log在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

python可執行文件並不在Web服務器executable PATH。網絡服務器也可能使用chroot或類似的技術進行保護,因此無法訪問python安裝。

嘗試指定python的可執行文件的完整路徑(你可以找到它交互與which命令),像這樣:

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

這就是它!我錯過了這個B/C我雖然我的路徑已經是正確的(我可以在控制檯上鍵入python並且python出現),但是它對於web服務器確實不正確!不知道這是如何不同,我將不得不做一些閱讀。建議在FreeBSD上做這件事很有幫助。我的路徑實際上是FreeBSD上的/ usr/local/bin/python!作品像一個魅力...我打字這麼長的B/C它不會讓我點擊複選標記呢.... 20秒...好吧,讓我們這樣做 – 2012-03-01 17:48:38

0
  1. 你能直接導入TEST3代碼到項目而不是通過操作系統調用它?

  2. 你的相對路徑是否都正確?這聽起來像是你可能會從錯誤的目錄中運行某些東西,或者在遠程機器的目錄中缺少一些需要的文件。

+0

嗯,我要去的子流程路線B/C [這個我在這裏陳述的其他問題](http://stackoverflow.com/questions/9507602/why-is-my-stdout-interfering-with-my-webpage-in-python)但是當我做ls -la時顯示在同一個目錄中......也許我會製作另一個測試腳本並測試它,只是作爲一個完整性檢查(test.py只是做一個打印)...... – 2012-03-01 17:43:58

相關問題