gpt4 book ai didi

python - 从 python 返回代码 256

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:10:04 25 4
gpt4 key购买 nike

这是从 raspberrypi.stackexchange.com 转贴的问题。当我试图让一些东西在树莓派上的 python 上工作时,因为它不涉及任何特定于 pi 的东西,所以我在这里发帖的人建议。原帖为here .


我正在尝试制作一个网络用户界面来更改 rapsberry pi 中的日期,但我一直收到 256 的返回码。

目前我所拥有的是这样的:

网页 -> 向 python 脚本提交 ajax 请求python 检查命令的类型(在本例中为时间/日期命令)并将字符串拼凑在一起,如下所示:

sudo date --set="20130901 20:10"

并将其存储在变量 commandString 中。然后 python 去:

os.system(commandString)

返回值一直传递到打印出来的 web ui。

我目前也将 commandString 值返回到 Web 用户界面以验证它,它看起来没问题。

问题是每次我测试时,我总是返回 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 。

最佳答案

更新: 或者可能只是使用 /usr/bin/sudo/bin/date ... 来确保找到命令。

试试这个:

import subprocess

p = subprocess.Popen('sudo -S date --set ...', shell=True, stdin=subprocess.PIPE)
p.communicate(input='<your password>')

这是启动子进程(通过 shell)并向其发送一些输入的更合适的方式。

如果你还需要读取进程的输出,那么例如:

p = subprocess.Popen('sudo -S date --set ...', shell=True,
stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate(input='<your password>')
print "\n".join("out: " + x for x in out.split('\n'))
print "\n".join("err: " + x for x in err.split('\n'))

...或者只是取出 out 和/或 err 的内容并解析它们。

关于python - 从 python 返回代码 256,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19134354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com