这是一个来自raspberrypi.stackexchange.com的转贴问题。虽然我试图在树莓派上使用python,但由于它不涉及任何pi特定的事情,所以我在这里发布了一些人的建议。原帖是here。从python返回256代码
我试图做一个Web UI来更改rapsberry PI的日期,但我不断收到256
返回代码目前我有什么是这样的:
网页 - >提交一个Ajax请求python脚本 蟒蛇检查字符串找什么类型的命令(在这种情况下,时间/日期命令),拼在一起的,如:
sudo date --set="20130901 20:10"
并将其存储在变量commandString
中。然后python去:
os.system(commandString)
和返回值一直传递到网站ui打印出来。
我现在还将commandString
的值返回到网络用户界面以验证它,它看起来没问题。
问题是,我每次测试时,都会返回256作为错误返回码。树莓派上的日期当然不会改变,因为我在前后手动检查它。
但是,如果我手动去到Python的树莓派和尝试:
commandString = 'sudo date --set="20130901 20:10"'
os.system(commandString)
它的工作原理没有问题。如果我在没有sudo
的情况下尝试它,那么我的返回值也是256,所以我想也许这是我的原始脚本的权限问题。我试过this link来检查我的脚本的权限,它似乎没问题? (os.geteuid()
为0)
如果重要,我使用lighttpd和fastcgi从web ui运行python。我的lighttpd配置目前是:
fastcgi.server = (
".py" => (
"python-fcgi" => (
"socket" => "/tmp/fastcgi.python.socket",
"bin-path" => "/var/www/command.py",
"check-local" => "disable",
"max-procs" => 1)
)
)
关于我失踪的任何想法?
在原来的职位,也有人建议我尝试类似:
echo <password> | sudo -S date --set="20130829 02:02
虽然它可能不是一个好主意,把我的root密码那样,我尝试过了,得到了相同的结果:它在终端/ shell和python解释器中工作,但不通过web ui到python。
你好,尝试第一种方法(不需要输出这个部分)现在产生一个错误代码1.从搜索中,我认为这意味着“操作不允许”? – mitim
好的。抱歉,马上发表另一条评论,但这真的很奇怪。为了好玩,我尝试了没有sudo(只是日期--set = ...),并将p.communicate改为p.wait。有趣的是,我得到我的返回码为0,它似乎工作。 O.o关于为什么添加sudo(有和没有密码)的任何想法都给出了1的返回码,但没有让它通过? (在脚本内os.geteuid()始终为0)。我想我需要休息一下,关闭我的pi,然后再选择它,以后再验证,因为这对于它的工作原理来说非常随意。 = _ = – mitim
是...这似乎现在工作。使用子进程而不是os.system而不使用'sudo'与我的命令。 – mitim