我正在为我的配偶开发两个简单的Python应用程序(在具有7英寸触摸屏的Raspberry Pi 4+上)。网络广播仍然可以正常运行。
现在是时候为她的旧音频CD集合附加一个应用了。但是直到今天我仍无法解决这个问题。
我想知道上面有多少首曲目,所以我可以选择其中一首来播放。
我的最后希望是使用shell命令来完成。当然,该命令在UNIX环境中可以很好地工作,但在Python中则不能。而且我不明白我犯了什么错误。可能是.decode('UTF-8')
方法的问题吗?令我惊讶的是,在执行command_2几秒钟后,cdrom开始运行几秒钟。但是在命令行中使用命令的行为相同。在命令执行期间是相当。
[如果有人有帮助的想法/解决方案,或者可以告诉我我有什么误解,那将是非常好的。
import subprocess
from subprocess import PIPE
command_1 = ("ls", "-l")
result = subprocess.run(command_1, stdout=PIPE, stderr=PIPE)
out = result.stdout
err = result.stderr
for line in out.decode('utf-8').splitlines():
print("Result", line)
# up to here everything works nice as expected
# trying to run my favorite, I come into trouble
command_2 = ["cdparanoia", "-sQ"]
result = subprocess.run(command_2, stdout=PIPE, stderr=PIPE)
out = result.stdout
err = result.stderr
for line in out.decode('utf-8').splitlines():
print("Result", line)
command_1的输出是一个众所周知的示例,您将在各处看到它。
command_2的输出
/home/pi/PycharmProjects/cd/venv/bin/python /home/pi/PycharmProjects/cd/cdrom.py
Process finished with exit code 0
对我来说,这似乎不太有用。
在命令行中运行command_2显示了我所期望的:
pi@raspberrypi:~ $ cdparanoia -sQ
cdparanoia III release 10.2 (September 11, 2008)
Table of contents (audio tracks only):
track length begin copy pre ch
===========================================================
1. 22190 [04:55.65] 55 [00:00.55] no no 2
2. 11350 [02:31.25] 22245 [04:56.45] no no 2
3. 20567 [04:34.17] 33595 [07:27.70] no no 2
4. 23500 [05:13.25] 54162 [12:02.12] no no 2
5. 16985 [03:46.35] 77662 [17:15.37] no no 2
6. 27358 [06:04.58] 94647 [21:01.72] no no 2
7. 15880 [03:31.55] 122005 [27:06.55] no no 2
8. 38797 [08:37.22] 137885 [30:38.35] no no 2
9. 11043 [02:27.18] 176682 [39:15.57] no no 2
TOTAL 187670 [41:42.20] (audio only)
pi@raspberrypi:~ $
要先解决这个问题:😢
cdparanoia -sQ > file.txt
不起作用,甚至在命令行上也不起作用。也许命令cdPARANOIA的名称是有原因的? 😄
我找到了解决问题的方法。我没有意识到输出屏幕的颜色是RED。红色表示PyCharm中的错误。 这给了我一个主意,这可能是错误输出。下一步,我在命令行上使用了以下命令:cdparanoia -Q 2>&1 | tee /home/pi/toc.txt
。这样就产生了一个文本文件,我现在可以将其用于进一步的编程。也许这可能对其他任何CDrom发烧友有所帮助。这是我的测试文件,以获取更多信息:
import os
test = 4
if test == 1: # RED text
command = "cdparanoia -Q"
elif test == 2: # WHITE text
command = "cdparanoia -Q 2>&1"
elif test == 3: # WHITE text, but no text file, the output needs to be doubled
command = "cdparanoia -Q 2>&1 /home/pi/toc.txt"
elif test == 4: # WHITE text and a textfile
command = "cdparanoia -Q 2>&1 | tee /home/pi/toc.txt"
print("Test ", test, os.system(command))