我正在制作一个函数,可以读取当前歌曲在spotify中播放的元数据。这是用lua编程的,因为它是一个很棒的wm的实现。我使用以下行获取以后可以使用的所有元数据。
handle = io.popen('qdbus org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Metadata | awk -F: '{$1="";$2="";print substr($0,4)}'')
然而,当Spotify不运行时,我没有得到预期的信息,qdbus向stderr流写入错误。我想使用qdbus写入错误流的事实来确定错误并在那里停止程序。(这也应该捕获与spotify是否运行无关的任何其他错误)
我的理解是lua popen使用popen3,可以细分为标准输出和标准输入。但是到目前为止,我所有的努力都是徒劳的,我的错误流总是空的。是否有可能检查标准错误中的非nil值,以确定对qdbus(或awk)的错误调用?
谢谢!
我认为你可以像这样在调用popen
时将stderr
重定向到stdout
:
handle = io.popen("somecommand 2>&1")
如果您想区分stderr
和stdout
,您不能使用io
库,但可以使用luaposix。
可以结帐。这是我为uci webgui编写的。我也遇到过同样的问题,当我真的需要两个独立的流时,我最终使用luaposix来处理这种事情。我的实现还为您提供了用于测试错误的程序退出代码:https://github.com/mkschreder/juci/blob/master/juci/lua/core.lua