Building a python fuse fs, in my readdir generator the first line of code is a print statement. This never appeared on my console. I modified it to a print to stderr as i thought it was a buffering issue. Still no output.
I added a manual flush to the next line – still nothing.
I added a time.sleep(3) to the next line, the prog does indeed sleep.
def readdir(self, path, offset):
print >> sys.stderr, 'Text'
sys.stderr.flush()
time.sleep(3)
I then go on to populate the directory with other code (yield fuse.Direntry)
I do get output and can do an ls in the terminal to see the contents of my mounted fuse directory, but I want to know why the print command doesn’t work in this one generator.
Update
For those that are struggling :
def readdir(self, path, offset):
print >> sys.stderr, 'Text'
sys.stderr.flush()
for o in os.listdir( "." + path ):
yield fuse.Direntry(o)
Is the code. It generates a file list and I can move around it. That is fine.
The problem is I never see ‘Text’ appear, not in STDOUT, STDERR, anywhere.
I was simply asking why this happens only in this generator. I can put print elsewhere in the fuse code and get output very well.
Your FUSE code runs under the control of FUSE library, so you can’t be sure that
stdin,stdoutandstderrare the ones in your terminal session.It’s quite possible that the
readdirgenerator is called with alternatestd*streams.Since you say that other parts of your FUSE code
printwithout any issues, you might want to prefix allprintstatements with a debugging log message (the value ofsys.stdout.isatty()or even therepr(sys.stdout)could be handy) to help you understand what is going on.