[英]Python print to stderr in generator
構建一個python保險絲fs,在我的readdir生成器中,第一行代碼是一條print語句。 這從未出現在我的控制台上。 我將其修改為stderr的打印,因為我認為這是一個緩沖問題。 仍然沒有輸出。
我在下一行中添加了手動刷新-仍然沒有。
我在下一行添加了time.sleep(3),該編確實確實處於睡眠狀態。
def readdir(self, path, offset):
print >> sys.stderr, 'Text'
sys.stderr.flush()
time.sleep(3)
然后,我繼續用其他代碼填充目錄(yield fuse.Direntry)。我確實獲得了輸出,並且可以在終端中執行ls來查看已安裝的保險絲目錄的內容,但是我想知道為什么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中看不到“文本”出現。
我只是在問為什么僅在此生成器中會發生這種情況。 我可以在保險絲代碼中的其他位置放置打印,並獲得很好的輸出。
您的FUSE代碼在FUSE庫的控制下運行,因此您不能確定stdin
, stdout
和stderr
是終端會話中的代碼。 readdir
生成器很有可能被備用std*
流調用。
由於您說FUSE代碼的其他部分print
沒有任何問題,因此您可能希望在所有print
語句前添加調試日志消息( sys.stdout.isatty()
或repr(sys.stdout)
可能是方便),以幫助您了解發生了什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.