difficulties with basic file i/o in python script called from php
就像文件中说的,我正在从ApacheWebServer上的一个PHP文件执行一个python脚本。我举的例子非常基础。
php文件--test.php
1 2 3 4
| <?php
echo"hello";
echo exec("/usr/local/bin/python2.7 test1.py");
?> |
python脚本--test1.py
1 2 3 4
| print"world"
fh = open ('testtest' ,'r')
for line in fh:
print line |
试验内容
当我没有test1.py的底2行时,会打印"world",但当我添加for line in file:时,它就会停止打印。谢谢。编辑:我正在打印testtest的内容。
- 你的代码在EDOCX1的第三行有一个错误(0),你忘了加括号。
- 如果直接运行python脚本会发生什么?
- 请张贴输出。
- 你能检查一下你的Apache日志吗?如果open返回None,python可能会提升AttributeError。另外,'r'是open所隐含的,所以你可以直接使用for line in open('testtest'):或者更好地使用with关键字。
- @头脑风暴语法错误是我的错。我的php文件中没有缺少括号(我刚刚检查过)。
- @jack m.当我在浏览器中打开php页面时,它的输出是hello。
- 只执行python脚本的输出是什么?在将Python嵌入到PHP之前,您可能应该先调试它。
- python脚本的输出是正确的world abcdefg(使用一个新的行字符,我不知道如何在stackoverflow中这样做)
- @Stefan我只是在Apache日志中添加了一个属性错误,但没有。只有2个python实例,它们都不是错误。
- 把这行改成:exec("/usr/local/bin/python2.7 test1.py 2>&1"),看看它是否能给你更多信息?
exec不做您期望它做的事情。文档声明它只返回最后一行输出。它建议使用直通。
- 谢谢您。我一试用就给你绿色支票,但现在这很有意义……
- 通过工作。应该注意,如果您想从一个文件中读取,则该文件上必须有+X。我还得进行chmod 777测试
您不想给变量file赋值。这是一个内置的python。您应该使用类似于fh的东西来处理文件,或者使用inFile之类的东西。这可能足以解决问题。
- 刚试过,没用。不过,想得不错
- @不确定的事。你说你已经尝试过绝对路径来访问相关文件了?如果导入sys并打印sys.path,它会得出什么结果?它是否包含脚本所在的目录?如果没有,sys.path.append()将允许您指定它。
- python内置模块只是引用,分配给它们不会做任何坏的事情,特别是因为它只影响本地范围,而不影响模块。这不一定是好的做法,但也不一定是坏的做法。
- 哇,我肯定没想到sys.path会成为一个列表。是的,sys.path包含testtesttest.php和test1.py居住的目录。