运行 服务器上的 python 脚本 - 通过命令行工作,但不能作为用户 apache 通过浏览器工作

Running a python script on server - works through command line but not through browser as user apache

具体得到这个错误:

WARNING: Cannot find unidecode lib. Expect issues with index sorting
lstat(./kpsewhich) failed: ./kpsewhich: No such file or directory
kpathsea: Can't get directory of program name: ./kpsewhich
Traceback (most recent call last):
  File “scriptname.py”, line 46, in 
    doc = TeX(myfile=outputname).parse()
  File "/usr/local/lib/python3.6/site-packages/plasTeX/TeX.py", line 136, in __init__
    fname = self.kpsewhich(myfile)
  File "/usr/local/lib/python3.6/site-packages/plasTeX/TeX.py", line 1380, in kpsewhich
    raise OSError('Could not find any file named: %s' % name)
OSError: Could not find any file named: uploads/filename

我有一个 python 脚本,用于转换我在 apache 服务器上 运行 PHP 形式的一些文件。当我直接通过命令行 运行 python 脚本时,我能够获得成功的输出(生成一个单独的文件)但是当我通过浏览器 运行 它时,我得到了以上错误。

我已检查以确认 pypandoc 已与 python 脚本的其他模块一起导入。

我调用 python 脚本使用(在 callscript.php 中)

shell_exec("/usr/bin/python3 scriptname.py $target_file 2>&1; echo $?");

具体来说,这一行给我的错误在 scriptname.py:

TeX(myfile=outputname).parse()

我应该注意到 outputname 与我要转换的文件同名。谢谢您的帮助。

同事解决了这个问题。结果是 PHP 重置了 PATH 变量,而不是 运行 而是

shell_exec("/usr/bin/python3 scriptname.py $target_file 2>&1; echo $?");

我运行它作为

shell_exec("PATH=/usr/bin python3 scriptname.py $target_file 2>&1; echo $?");

成功了!感谢所有帮助。