我从php运行另一个文件时遇到问题。我希望我的php params是运行python文件的输出,该文件本身调用另一个文件。
这是我的php文件:
<?php
if (isset($_POST['submit'])) {
$params = solve();
}
function solve() {
exec("python array.py", $output);
return $output;
}
?>
如果array.py只是:
if __name__ == "__main__":
print 1
print 2
print 3
print 4
我的输出会得到1,2,3,4,但是一旦我将array.py更改为调用os.system的以下文件,我什么也得不到。所以新的array.py是:
import os
def main():
os.system("python test.py") #test.py creates tmp.txt with 4 lines w/ values 1,2,3,4
def output():
f = open("tmp.txt", "r")
myReturn = []
currentline = f.readline()
while currentline:
val = currentline[:-1] #Getting rid of '\n'
val = int(val)
myReturn = myReturn + [val]
currentline = f.readline()
f.close()
return myReturn
if __name__ == "__main__":
main()
o = output()
print o[0]
print o[1]
print o[2]
print o[3]
此外,如果我只运行test.py,则输出为文件tmp.txt:
1
2
3
4
所以现在,当我运行我的php文件时,输出tmp.txt甚至没有在目录中创建,因此我也没有从我的php获得任何输出。 我不确定为什么会发生这种情况,因为当我自己运行array.py时,我得到了所需的输出,并创建了tmp文件。
编辑: 我忘了包括:上面的导入操作系统。
答案 0 :(得分:3)
将exec更改为:
exec("python array.py 2>&1", $output)
或检查Web服务器或php错误日志。这将把python脚本的错误输出返回到你的php脚本(通常不是你想要的生产)。