在我的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,任何地方。
我只想问为什么这只发生在这台发电机上。我可以将打印放在保险丝代码的其他地方,并获得非常好的输出。
答案 0 :(得分:1)
您的FUSE代码在FUSE库的控制下运行,因此您无法确定stdin
,stdout
和stderr
是终端会话中的代码。
使用备用readdir
流调用std*
生成器很可能。
由于您说FUSE代码print
的其他部分没有任何问题,您可能希望在所有print
语句前加上调试日志消息(sys.stdout.isatty()
的值)甚至repr(sys.stdout)
可能很方便),以帮助您了解正在发生的事情。