0

构建一个 python fuse fs,在我的 readdir 生成器中,第一行代码是一个打印语句。这从未出现在我的控制台上。我将其修改为打印到 stderr,因为我认为这是一个缓冲问题。还是没有输出。

我在下一行添加了手动刷新 - 仍然没有。

我在下一行添加了 time.sleep(3),程序确实在睡觉。

def readdir(self, path, offset):
    print >> sys.stderr, 'Text'
    sys.stderr.flush()
    time.sleep(3)

然后我继续用其他代码填充目录(yield fuse.Direntry)我确实得到了输出,并且可以在终端中执行 ls 来查看我安装的 fuse 目录的内容,但我想知道为什么打印命令没有不能在这台发电机上工作。

更新

对于那些正在苦苦挣扎的人:

def readdir(self, path, offset):
    print >> sys.stderr, 'Text'
    sys.stderr.flush()
    for o in os.listdir( "." + path ):
        yield fuse.Direntry(o)

是代码。它会生成一个文件列表,我可以在它周围移动。没事儿。问题是我从未在任何地方看到“文本”出现,而不是在 STDOUT、STDERR 中。

我只是在问为什么这只发生在这个生成器中。我可以在保险丝代码的其他地方打印并很好地得到输出。

4

1 回答 1

1

您的 FUSE 代码在 FUSE 库的控制下运行,因此您无法确定stdin,stdout并且stderr是终端会话中的代码。很有可能readdir使用备用std*流调用生成器。

由于您说 FUSE 代码的其他部分print没有任何问题,因此您可能希望在所有print语句前加上调试日志消息(的值sys.stdout.isatty()甚至repr(sys.stdout)可能很方便),以帮助您了解正在发生的事情。

于 2011-11-18T13:12:17.927 回答