0

我有一个调用 GPIOZERO 的 Python 脚本来监视按钮按下,调用一些不同的功能(关闭 LCD 等)这些从 cron 工作,但从子进程对 bash 的调用却没有。从命令行运行良好。此脚本中的其他功能确实有效,但不是这个,我仔细检查了绝对路径,它们似乎是正确的。

在 myscript.py 中:

#!/usr/local/bin/python
sys.path.append('/home/pi/.local/lib/python2.7/site-packages')
import subprocess

#set global batch mode on or off
def running():
    global r
    r = not r
    if r is True:
         subprocess.Popen(['/home/pi/Documents/ytu/desktop_col.sh', 'run']) 
     print "run mode"

elif r is False:
     subprocess.Popen(['/home/pi/Documents/ytu/desktop_col.sh' ,'stop'])
     print "pause mode"

从 python 命令行运行时,脚本可以正常工作,但不能从 Cron 或任何其他启动方法运行。这是它调用的 bash 代码。我正在切换桌面背景以用作状态指示器。

    #!/usr/bin/bash
    alert_display=`cat /media/pi/VDRIVE/prefs/alert_display_number.txt`

   export XAUTHORITY=/home/pi/.Xauthority
   export DISPLAY=:$alert_display


   if [ "$1" = "run" ] ; then
     pcmanfm --set-wallpaper="/home/pi/Downloads/youtube-512.png"
     echo "run" > "/media/pi/VDRIVE/prefs/run-status.txt"
   elif [ "$1" = "stop" ] ; then
     pcmanfm --wallpaper-mode=color
     echo "stop" > "/media/pi/VDRIVE/prefs/run-status.txt"

   fi
4

1 回答 1

0

事实证明,罪魁祸首是 pcmanfm 调用。错过了这条线:

    export XDG_RUNTIME_DIR=/run/user/1000

这意味着代码没有在正确的显示空间中执行。要么抛出错误,要么告诉我“桌面管理器未激活”

在以下位置找到解决方案: Pcmanfm set wallpaper failed on Raspbian stretch in cron

希望这可以帮助某人

于 2019-04-25T11:57:22.550 回答