2012-12-14 41 views
0

我已经试图调用从bar.php一个Python代码一样从PHP调用Python和保存文件,

$cmd = "python foo.py"; 
system($cmd); 

它运行没有问题。但是,foo.py应该将文件保存在磁盘上。它不在那里。我以某种方式发现运行Web服务器的用户是www-data。

我试着从用户www-data的命令行运行php脚本 $ php bar.php 它运行正常并保存文件,所以用户www-data应该有权写入目录。

我注意到有一个投票“对其他用户没有帮助”。但是,当你有一个PHP服务,并且你有用Python等其他语言编写的代码时,知道这是必要的。

感谢您的所有建议。

我怀疑它为B/C我在Python代码 在foo.py使用Matplotlib,我有这样

pl.scatter(data,...) 
pl.plot(data,...) 
pl.legend() 
pl.save('path/to/bam.png') 

也许从网络调用的时候,它可以绘制图像的代码。那是possbile?如果是这样,有什么方法可以解决它?谢谢!

+1

您必须调试脚本。也许它不是在你认为的文件上写文件? –

+0

嗯,我在命令行运行,它的行为完全像我想要的。在Web浏览器中,它向stdout显示相同的输出。 –

+0

你确定Python脚本从PHP调用时运行吗?如果你是它的100%,那么检查你正在写入的文件夹的权限。 –

回答

2

我只能推测由于你提供的信息量,但我认为这是你的问题。您的Python脚本可能使用相对路径,这意味着它创建的文件将出现在您的工作目录中,或相对于它。

为了证实这一点,并找出你的文件正在准备,你可以打印出当前工作目录时,在python:

import os 
print os.getcwd() 
相对于python脚本

并修复它,用路径相反,或绝对路径。例如:

import os 
basedir = os.path.abspath(os.path.dirname(__file__)) 

file_path = os.path.join(basedir, 'my-file-name.txt') 
+0

非常感谢,我会试试 –

+0

我更新了一下这个问题 –

+0

@AlfredZhong:当你编写'pl.save('path/to/bam.png')'时,你将文件保存到一个位置* **相对于工作目录***。工作目录不一定是脚本的目录。根据运行脚本的方式和人员,工作目录可以在任何地方。如果您无法控制脚本的运行位置,则您可以使用绝对路径。我的答案解释了如何实现从脚本位置外推的绝对路径。 – Hubro