Popen输入包含&时会失败吗?

2024-09-28 23:19:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python脚本,它返回当前正在播放的歌曲的信息:

#! /usr/bin/python3

import subprocess

p = subprocess.Popen(["/home/lucas/media/.deadbeeffiles/deadbeef", "--nowplaying", "%t"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate()
track = out.decode("utf-8")

p = subprocess.Popen(["/home/lucas/media/.deadbeeffiles/deadbeef", "--nowplaying", "%a"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate()
artist = out.decode("utf-8")

p = subprocess.Popen(["/home/lucas/media/.deadbeeffiles/deadbeef", "--nowplaying", "%b"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate()
album = out.decode("utf-8")

outString = "\"%s\" by %s on %s" % (track, artist, album)

q = subprocess.Popen(["notify-send", "Now Playing", outString])

但是,如果track(或者可能是artist或{})中有一个&,那么{}通知只有Now playing,没有{}中的任何文本。我试着在track = out.decode("utf-8")下添加这个:

^{pr2}$

但它什么也没做。但是

track = track.replace("&", "and")

好作品。是什么导致了它的失败?subprocess.Popen应该处理特殊字符(比如“nowplaying”中的空格),我知道给&添加转义并不能解决这个问题。在


Tags: homestderrstdouttrackoutmediautfsubprocess