我已经设置了一个将用户数据传递给python脚本的小型Web应用程序。 Python应该开始工作,在Web服务器上创建一个文件,并允许用户下载它。但是,脚本执行似乎停止发出Python write()
命令的位置。
的Python:
print("Writing to '" + filename + "'")
f = open('backups/' + filename, 'w')
f.write(self.output())
f.close()
print("Done!")
PHP:
$user = escapeshellarg($_POST['user']);
$password = escapeshellarg($_POST['password']);
$command = './backup.py '.$user.' '.$password;
print(exec($command));
实际结果:
预期结果:
我已完成以下操作:
drwxrwsr-x
./backup
)
#!/usr/bin/env python3
shebang出现在python文件中sudo su www-data
更改为用户www-data然后启动php命令行,并输入上述命令调用我的Python脚本时,文件正确创建!答案 0 :(得分:1)
我已经正式浪费了一整天的生命。
权限没问题。 发生的事情是,如果python脚本是通过我的php脚本调用的,那么它只会失败,只有当它由Apache提供时才会失败。
查看Apache错误日志显示python脚本失败,因为它无法将字节写入文件而ascii转换失败,因为输出中有unicode数据。
这样做f = open(filename, 'wb')
解决了这个问题。
在我的开发计算机上或通过内置的PHP服务器中未观察到此行为。仍然想知道为什么文件处理存在差异。如果有人有答案,我会很感激。