【问题标题】:My Raspbian doesn't reboot via a Python application我的 Raspbian 没有通过 Python 应用程序重新启动
【发布时间】:2015-01-21 08:50:16
【问题描述】:

我正在拼命寻找一种方法来强制运行 Raspbian 的 Raspberry Pi 在满足特定条件(Python 脚本)时重新启动,但是到目前为止我没有成功......

我已经使用 popen 尝试了以下语句:

sudo reboot -i -p
sudo reboot -f
sudo shutdown -r -f now

我认为问题可能是通过Python应用程序本身调用它,因此我编写了一个小C程序来杀死所有正在运行的Python应用程序然后重新启动,但没有成功......

我的 Raspberry 电量充足(红色 LED 始终亮起),当直接从命令窗口调用时,我上面描述的所有命令都可以正常工作。

感谢任何帮助!

谢谢,

编辑: 根据需要添加我的 python 脚本:

    from subprocess import Popen, PIPE

    def reboot():
        echo.echo("Rebooting...")
        db.write_alarm(get_alarm_status())
        upload.upload_log()
        reboot_statement = "sudo shutdown -r -f now"
        popen_args = reboot_statement.split(" ")
        Popen(popen_args, stdout=PIPE, stderr=PIPE)

【问题讨论】:

  • 你能粘贴你的python脚本吗?
  • 嗨阿努帕姆。刚刚添加。谢谢
  • 我认为您可能必须以 root 身份运行您的脚本并摆脱 sudo。不是来自您的用户帐户。
  • @Geotob, sudo 如果设置正确,无需密码即可正常工作
  • @JohnLaRooy-AKAgnibbler 是的 if 设置正确:) 因此只是一个评论。

标签: python linux raspberry-pi raspbian reboot


【解决方案1】:

试试这个:

创建一个名为 reboot.py 的文件,其内容如下:

import os
os.system("shutdown -r now")

然后这样称呼它:

sudo python reboot.py

假设这可行,您可能可以使用 sudo 调用您的原始脚本以使其工作。

【讨论】:

    【解决方案2】:

    你应该传递shell=True id 你希望shell处理参数

    Popen("sudo shutdown -r -f now", stdout=PIPE, stderr=PIPE, shell=True)
    

    【讨论】:

    • 我按照建议打破了论点(请参阅我的问题),但仍然没有成功。知道它可能是什么吗?
    • 在 REPL 中尝试Popen("sudo shutdown -r -f now", shell=True)。它说什么?
    • 嗨,约翰。完全相同的。 :-(
    • 我想这与调用本身无关,例如其他应用程序调用就可以正常工作。我想可能有什么东西阻止了重启。
    猜你喜欢
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    相关资源
    最近更新 更多