Python在生成器中打印到stderr

时间:2011-10-29 17:44:55

标签: python fuse

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

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

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

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

然后我继续用其他代码填充目录(yield fuse.Direntry) 我得到输出并且可以在终端中执行ls以查看已安装的fuse目录的内容,但我想知道为什么print命令在这个生成器中不起作用。

更新

对于那些正在挣扎的人:

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

是代码吗?它生成一个文件列表,我可以四处移动。那样就好。 问题是我从未看到“文本”出现,而不是在STDOUT,STDERR,任何地方。

我只想问为什么这只发生在这台发电机上。我可以将打印放在保险丝代码的其他地方,并获得非常好的输出。

1 个答案:

答案 0 :(得分:1)

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

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