1

我正在制作一个函数,可以读取在 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可以细分stdout和stderr。但到目前为止我所有的努力都没有结果,我的错误流总是空的。是否可以检查 stderr 中的非 nil 值以确定对 qdbus(或 awk)的错误调用?

谢谢!

4

3 回答 3

4

我认为你可以在调用中重定向stderr到这样的:stdoutpopen

handle = io.popen("somecommand 2>&1")
于 2013-06-05T01:55:08.283 回答
1

如果你想区分stderrand stdout,你不能用io库做到这一点,但你可以用 luaposix。例如,请参阅此答案

于 2013-06-05T08:17:12.167 回答
0

You can checkout juci.exec which I wrote for JUCI webgui. I struggled with the same problem and I ended up using luaposix for this kind of thing when I really need two separate streams. My implementation also gives you the program exit code which is good for testing for errors: https://github.com/mkschreder/juci/blob/master/juci/lua/core.lua

于 2015-10-25T12:33:39.587 回答