[英]Reload or restart python script in a bash shell
我是 python 世界中的一个全新的菜鸟,所以不要对我评价太快 :-) 我试图强制 python 脚本在 bash 脚本开始时重新加载或重新启动。
我试过了 :
pkill -f myscript.py
和
killall myscript.py
和别的...
实际上,我想在更改那些 .wav 文件后运行调用 .wav 文件的相同脚本......如果我不重新加载脚本或重新启动它,它会继续播放旧文件。
也许,还有其他解决方案。 这是我想重新加载的脚本(这是一个为我女儿播放音乐的按钮脚本)
#!/usr/bin/env python3
import pygame
from gpiozero import LED, Button
from signal import pause
pygame.init()
button_sounds = {Button(2): pygame.mixer.Sound("/home/pi/gpio-music-box/samples/1.wav"),
Button(3): pygame.mixer.Sound("/home/pi/gpio-music-box/samples/2.wav"),
Button(4): pygame.mixer.Sound("/home/pi/gpio-music-box/samples/3.wav"),
Button(17): pygame.mixer.Sound("/home/pi/gpio-music-box/samples/4.wav")}
for button, sound in button_sounds.items():
button.when_pressed = sound.play
pause()
这是我的 bash 脚本:
#!/bin/bash
***HERE THE COMMAND I NEED !***
rm -r /home/pi/gpio-music-box/samples/*
cp -r /home/pi/gpio-music-box/comptines/* /home/pi/gpio-music-box/samples/
/home/pi/gpio-music-box/music.py
非常感谢你,请注意我的英语,我是法国人 :-) 安迪
尝试这个
#!/bin/bash
pid=$(ps auxwww | grep nameOfScript.py | grep -v grep | awk '{print $2}')
kill -9 $pid
rm -r /home/pi/gpio-music-box/samples/*
cp -r /home/pi/gpio-music-box/comptines/* /home/pi/gpio-music-box/samples/
nohup /home/pi/gpio-music-box/music.py &
祝你今天过得愉快
首先,您可以通过使用输出格式来减少来自 ps 的大量“噪音”。 然后,您可以通过使用 awk 进行搜索来停止同时使用 grep 和 awk。
ps -eo "%p %a" | awk '/nameOfScript.py/ && $1 != PROCINFO["pid"] { print "kill -9 "$1 }'
这会强制 ps 仅打印 pid (%p) 和完整命令 (%a)。 然后将输出通过管道传送到 awk,在其中搜索包含脚本名称的行。 它使用 awk 的当前进程 id 对任何条目进行折扣,然后使用它来打印具有相关进程 id 的 kill 命令。
一旦您确认 kill 命令按预期显示,您可以使用 awk 的系统功能通过以下方式实际运行该命令:
ps -eo "%p %a" | awk '/prometheous-things.py/ && $1 != PROCINFO["pid"] { system("kill -9 "$1) }'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.