在 lua io.popen 中使用 stderr 来确定错误的函数调用

Hoo*_*ijk 2 lua stderr awesome-wm qdbus popen3

我正在制作一个函数,可以读取 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)}\'') 
Run Code Online (Sandbox Code Playgroud)

但是,当 Spotify 未运行时,我无法获得预期的信息,并且 qdbus 会向 stderr 流写入错误。我想利用 qdbus 写入错误流的事实来确定故障并在那里停止程序。(这还应该捕获与 Spotify 是否正在运行无关的任何其他错误)

我的理解是lua popen使用popen3可以在stdout和stderr之间细分。但到目前为止我的所有努力都是徒劳的,我的错误流总是空的。是否可以检查 stderr 中的非 nil 值以确定对 qdbus (或 awk)的错误调用?

谢谢!

Yu *_*Hao 5

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

handle = io.popen("somecommand 2>&1")
Run Code Online (Sandbox Code Playgroud)