首先,如果这个问题已经在其他地方得到了回答,我很抱歉,但是我自己找不到答案。你知道吗
我在Ubuntu 16.04
中运行了一个LAMP服务器,我正在尝试使用Python 2.7.12
从PHP写入一个文本文件。你知道吗
我有以下两个文件(注意,这两个文件在同一个目录中):
索引.php
<?php
$command = escapeshellcmd('python test.py a b c');
$output = shell_exec($command);
echo $output;
?>
测试.py
import sys
print "argv1: ", sys.argv[1]
print "argv2: ", sys.argv[2]
print "argv3: ", sys.argv[3]
f = open("test-" + sys.argv[1] + ".txt","w+")
f.write("test")
f.close()
print "Text added."
当我导航到索引.php在浏览器中,我得到以下输出:
argv1: a argv2: b argv3: c
但是,当我在终端中执行此代码时,会创建文件test-a.txt
,并获得以下输出:
layer8@alpha:/var/www/html/$ python test.py a b c
argv1: a
argv2: b
argv3: c
Text added.
我似乎无法理解和理解为什么Python文件没有执行任何超过第三个print argv3语句的代码?你知道吗
我对此做了很多研究,却一直找不到解决办法。如果您需要任何进一步的信息,请不要犹豫问我,任何答复都很感谢。你知道吗
谢谢。你知道吗
shell_exec
只返回打印到stdout的get。如果Python脚本中出现异常,那么整个异常消息和回溯都会打印在stderr上,因此它们不会成为输出的一部分。请注意,理论上,如果发生错误,shell_exec
应该返回NULL,但这是PHP,因此如果内置函数的行为如文档所示,则不会有多大乐趣。。。你知道吗无论如何:问题很可能是打开文件的问题,也很可能是权限问题。你知道吗
首先,您使用的是相对路径,相对路径是针对当前工作目录解析的,而不是针对脚本所在的目录解析的,因此,如果您期望一个合理且可预测的行为,请始终使用绝对路径(或者将其作为参数传递,或者根据脚本的当前位置构建它)。你知道吗
另外,您的Apache服务器可能不会(这是一个轻描淡写的说法)使用与您相同的env和用户运行,因此可能只是不允许打开一个文件,以便在他自己的当前工作目录中进行编写。你知道吗
最后,即使它的PYTHONPATH也可能与您的不同,因此它甚至可能正在执行另一个(剩余的)
test.py
或一个过时的test.pyc
文件。你知道吗长话短说:如果没有访问系统的权限,就不可能确定到底出了什么问题,但至少现在你知道从哪里开始调试了。你知道吗
我个人要做的第一件事是确保python脚本中的任何错误都打印到stdout:
相关问题 更多 >
编程相关推荐