我有一个python脚本解码来自USB设备的输入并将命令发送到PHP脚本.从控制台运行时,该脚本运行良好,但我需要它在启动时运行.
我创建了一个systemd服务来启动脚本,这似乎运行良好,除了systemctl start service-name进程永远不会让我返回命令提示符.在它运行时,我可以完全按照预期与输入设备进行交互.但是,如果我systemctl start使用ctr-z 退出进程,脚本只会运行几秒钟.
这是我写的.service文件:
[Unit]
After=default.target
[Service]
ExecStart=/usr/bin/python /root/pidora-keyboard.py
[Install]
WantedBy=default.target
Run Code Online (Sandbox Code Playgroud)
这是我的python脚本:
#!/usr/bin/env python
import json, random
from evdev import InputDevice, categorize, ecodes
from urllib.request import urlopen
dev = InputDevice('/dev/input/event2')
def sendCommand(c):
return json.loads(urlopen("http://127.0.0.1/api.php?command="+c).read().decode("utf-8"))
def getRandomStation():
list = sendCommand('stationList')
list = list['stations']
index = random.randint(0, (len(list)-1))
print(list[index]['id'] + " - " + list[index]['name'])
sendCommand('s' + list[index]['id'])
print(dev)
for event in dev.read_loop():
if event.type == ecodes.EV_KEY:
key_pressed = str(categorize(event))
if ', down' in key_pressed: …Run Code Online (Sandbox Code Playgroud) HTML首先通过一个净化器(tinyMCE + Wordpress)运行,所以它应该匹配一些标准形式.所有脚本和样式标签都被剥离,标签内的所有数据都是html_encoded,因此不需要担心无关的符号.
我知道用正则表达式解析html的一般立场是"不要",但在这个具体的例子中,问题似乎不像解析,更像是简单的字符串处理......我是否错过了一些看不见的复杂程度?
至于我可以将其分解,似乎可以将所讨论的模式分解为逻辑组件:
/<[a-zA-Z][^>]+ - 匹配任何html标记的开头以及其中的任何标记和属性组合,但不匹配结束括号(?i:class)=\" - 类属性的开始,不区分大小写(?: - 启动非捕获子模式(?: *[a-zA-Z_][\w-]* +)* - 任意数量的类名(或无),但如果存在,则在捕获之前必须有空格( *.implode('|',$ classes).*) - 要捕获的类集,preg_quoted(?: +[a-zA-Z_][\w-]* *)* - 任意数量的类名(或无),但如果存在,则捕获后必须有空格)+ - 关闭非捕获子模式并循环它以防多个匹配类在一个属性中\"(?: [^>]*)>/ - class属性的结尾,以及html标记末尾的所有内容制作最终的正则表达式:
$pattern = "/<[a-zA-Z][^>]+ (?i:class)=\"(?:(?: *[a-zA-Z_][\w-]* +)*( *".implode('|', $classes)." *)(?: +[a-zA-Z_][\w-]* *)*)+\"(?: [^>]*)>/";
Run Code Online (Sandbox Code Playgroud)
我还没有尝试过运行它,因为我知道它是否有效,我会非常想要使用它,但是通过它运行preg_replace它似乎应该可以完成这项工作,除了一个小问题.我相信它会在捕获区域周围留下无关的空白.这不是一个重要问题,但如果有人知道如何,可能会避免它.
还应该注意的是,这不是一个关键任务的过程,如果我的捕获偶尔无法移除类,那么没有人会死.
所以,实质上......有人可以解释在这种情况下是什么让这个坏主意?
我需要使用单个文件运行 mpg123,这样它会像往常一样自动启动和自动关闭,但是,我需要能够使用发送到 fifo 文件的命令来覆盖此默认行为。
我一直在运行mpg123 filename.mp3脚本,只是等待它完成后再继续。但是,我希望另一个脚本能够根据用户的输入暂停播放、控制音量或提前终止进程。
mpg123 -R --fifo /srv/http/newsctl filename.mp3 似乎启动 mpg123 并创建管道,但不开始播放。
我如何使这项工作?