繁体   English   中英

在 bash shell 中重新加载或重启 python 脚本

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM