2012-03-01 20 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

相关问题