PHP exec():运行bash脚本来configuration环境,然后执行Python程序

Shell是tcsh。 PHP v5.1.6。 Redhat 5.7。 Safe_mode已closures。

使用exec从浏览器运行php脚本:

  1. bash脚本上通过source命令configuration环境
  2. 运行一个依赖bash脚本设置的环境的python程序(程序输出到STDOUT)

这从命令行($ shell = tcsh)工作:

/bin/bash -c "source /path-to-config-bash-script/config.sh; /bin/path-to-python /path-to-python-program/prog.py 2>&1" 

这不是。 Python程序返回一个错误,指出环境设置不正确(无法find某些库等):

 <?php .... $cmd = "/bin/bash -c \"source /path-to-config-bash-script/config.sh; /bin/path-to-python /path-to-python-program/prog.py 2>&1\""; $ret_val = exec( $cmd, $ret_arr, $err ); ?> 

四重检查的权限和一切看起来不错。

谢谢!

四件事要注意。

1 – PHP不能有safe_mode来利用exec()

2 – shell脚本脚本需要在文件的顶部声明#!/bin/bash ,而不是传递给exec()

3 – python脚本必须在脚本的顶部有#!/usr/bin/python ,而不是试图通过exec()语句执行它。

4 – 所有到达脚本的目录必须是可读的。

所以决赛应该是这样的:

 $cmd = "/path-to-config-bash-script/config.sh; /path/to-python/program/prog.py 2>&1"; 

这应该解决你所有的问题。