在 Subprocess 命令中使用 Qt Resource
Using Qt Resource in Subprocess command
我编译我的 Qt 资源集合 (QRC) 并将其导入我的 Python 项目,现在我希望能够使用子进程访问我的 QRC 中的文件。我该怎么做?
我在下面试过了,但它无法访问编译后的 QRC...
import application_rc
test = QUrl("qrc:///resources/sounds/LRMonoPhase4.wav").path()
process = subprocess.Popen(["aplay", test],
shell=False, stderr=subprocess.PIPE)
QResource只是Qt已知的资源,所以其他技术不知道如何处理.qrc方案,所以在这种情况下你必须创建一个临时文件来保存音频,aplay可以使用它:
import subprocess
from PySide2.QtCore import QFile, QFileInfo, QIODevice, QTemporaryFile
import application_rc
filename = ":///resources/sounds/LRMonoPhase4.wav"
file = QFile(filename)
fi = QFileInfo(file)
if file.open(QIODevice.ReadOnly):
fp = QTemporaryFile("XXXXXX.{}".format(fi.completeSuffix()))
if fp.open():
fp.write(file.readAll())
fp.seek(0)
tmp_filename = fp.fileName()
process = subprocess.Popen(
["aplay", "-vvv", tmp_filename], shell=False, stderr=subprocess.PIPE
)
process.communicate()
注意:如果要在使用 Qt 事件循环的应用程序中使用它,那么使用 QProcess 比 subprocess.Popen 更好。
我编译我的 Qt 资源集合 (QRC) 并将其导入我的 Python 项目,现在我希望能够使用子进程访问我的 QRC 中的文件。我该怎么做?
我在下面试过了,但它无法访问编译后的 QRC...
import application_rc
test = QUrl("qrc:///resources/sounds/LRMonoPhase4.wav").path()
process = subprocess.Popen(["aplay", test],
shell=False, stderr=subprocess.PIPE)
QResource只是Qt已知的资源,所以其他技术不知道如何处理.qrc方案,所以在这种情况下你必须创建一个临时文件来保存音频,aplay可以使用它:
import subprocess
from PySide2.QtCore import QFile, QFileInfo, QIODevice, QTemporaryFile
import application_rc
filename = ":///resources/sounds/LRMonoPhase4.wav"
file = QFile(filename)
fi = QFileInfo(file)
if file.open(QIODevice.ReadOnly):
fp = QTemporaryFile("XXXXXX.{}".format(fi.completeSuffix()))
if fp.open():
fp.write(file.readAll())
fp.seek(0)
tmp_filename = fp.fileName()
process = subprocess.Popen(
["aplay", "-vvv", tmp_filename], shell=False, stderr=subprocess.PIPE
)
process.communicate()
注意:如果要在使用 Qt 事件循环的应用程序中使用它,那么使用 QProcess 比 subprocess.Popen 更好。