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

在lua io.popen中使用stderr来确定错误的函数调用,lua,stderr,awesome-wm,qdbus,popen3,Lua,Stderr,Awesome Wm,Qdbus,Popen3,我正在制作一个函数,可以读取spotify中播放的当前歌曲的元数据。这是在lua中编程的,因为它是awesome wm的一个实现。我得到了下面这行代码来获取我以后可以使用的所有元数据 handle = io.popen('qdbus org.mpris.MediaPlayer2.spotify /org/mpris/MediaPlayer2 org.mpris.MediaPlayer2.Player.Metadata | awk -F: \'{$1=\"\";$2=\"\";print subs

我正在制作一个函数,可以读取spotify中播放的当前歌曲的元数据。这是在lua中编程的,因为它是awesome 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写入错误流的事实来确定错误并在那里停止程序。(这还应捕获与wheter spotify是否运行无关的任何其他错误)

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


谢谢

我想您可以在调用
popen
时将
stderr
重定向到
stdout
,如下所示:

handle = io.popen("somecommand 2>&1")

我想您可以在调用
popen
时将
stderr
重定向到
stdout
,如下所示:

handle = io.popen("somecommand 2>&1")

如果要区分
stderr
stdout
,不能使用
io
库,但可以使用LuapoFix。例如,请参见。

如果要区分
stderr
stdout
,则不能使用
io
库,但可以使用LuapoFix。例如,请参阅。

您可以签出我为juci webgui编写的juci.exec。我也遇到了同样的问题,当我真的需要两个独立的流时,我最终使用了LuapoFix。我的实现还为您提供了程序退出代码,该代码有助于测试错误:

您可以签出我为juci webgui编写的juci.exec。我也遇到了同样的问题,当我真的需要两个独立的流时,我最终使用了LuapoFix。我的实现还为您提供了程序退出代码,该代码有助于测试错误:

不是我的意思,我实际上希望io.popen写入两个不同的变量,这取决于它们是来自stderr还是stdout。这将简单地将stderr重定向到stdout。如果我的问题不是clearer@Hoogendijk在那种情况下,我不能做这项工作。由于它是用C语言中的
fork
pipe
实现的(我还没有确认)。这不是我的意思,我实际上希望io.popen写入两个不同的变量,这取决于它们是来自stderr还是stdout。这将简单地将stderr重定向到stdout。如果我的问题不是clearer@Hoogendijk在那种情况下,我不能做这项工作。因为它是用C语言中的
fork
pipe
实现的(我还没有确认)