首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >卡在os.rename()

卡在os.rename()
EN

Stack Overflow用户
提问于 2015-04-02 04:58:33
回答 4查看 612关注 0票数 1

我是ubuntu用户..。我在php中有一个命令来执行python文件。python文件被设置为可执行文件。所以,我的php命令是:-

代码语言:javascript
复制
 shell_exec("try.py");

python文件位于桌面上。但是php文件位于www文件夹中。

代码语言:javascript
复制
 /var/www/try.php

在try.py中,我有一个代码将桌面上的文件重命名如下:

代码语言:javascript
复制
 print "enter"
 os.rename("a.txt", "b.txt")
 print "exit"

所以,try.py和a.txt都在桌面上。

我的问题是,当我执行php文件时,它只显示"enter“,而不显示”exit“。所以我想它不能执行os.rename,可能是因为根特权或者任何我不知道的东西。我尝试了一些解决方案来禁用sudo的密码,但我仍然没有显示“退出”。

但是,如果我通过在桌面上双击try.py并执行它直接执行它,则可以执行该命令,输出结果显示:-

代码语言:javascript
复制
enter
exit

那么,有谁知道如何使用php执行它呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-04-13 03:38:33

最后,我找到了解决办法。

为了能够在桌面上使用os.rename重命名文件,我们需要编辑sudoers中的一些配置。

它涉及到visudo中的一些步骤以及php脚本。

在visudo中(在终端中使用命令"sudo visudo“)-

代码语言:javascript
复制
#user privilege specification
root All=(ALL:ALL) ALL
www-data ALL=(ALL:ALL) ALL

#includedir /etc/sudoers.d

ubuntu ALL=(ALL) NOPASSWD: ALL //use your username.. mine is ubuntu
www-data ALL=(ALL) NOPASSWD: ALL //the place where i put the php file

在php文件:-

代码语言:javascript
复制
<?php
$output = exec("sudo python /home/ubuntu/Desktop/[filename.py]");
?>

因为python文件是一样的..。

代码语言:javascript
复制
os.rename("a.txt", "b.txt")

好的..。这就是解决办法..。现在我可以运行python脚本,它将从php.更改桌面文件的名称。

谢谢你对解决方案的所有评论和建议。=)

票数 1
EN

Stack Overflow用户

发布于 2015-04-02 05:03:32

可以使用php函数在rename中直接重命名文件。

代码语言:javascript
复制
rename($oldname, $newname);
票数 1
EN

Stack Overflow用户

发布于 2015-04-02 05:08:43

问题是,当您执行os.rename("a.txt", "b.txt")时,它是从运行应用程序的目录中查找a.txt (因此它在/var/www/中查找a.txt )。

您应该为a.txtb.txt提供完整的路径:

代码语言:javascript
复制
os.rename('/home/user/Desktop/a.txt', '/home/user/Desktop/b.txt')

您还必须确保www-data (或任何正在运行Apache的用户)可以写入桌面目录;但是,从安全的角度来看,是一个非常糟糕的主意,--服务器上运行的任何脚本都可以读取桌面的内容(甚至删除文件)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29405250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档