簡體   English   中英

Python打印到生成器中的stderr

[英]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庫的控制下運行,因此您不能確定stdinstdoutstderr是終端會話中的代碼。 readdir生成器很有可能被備用std*流調用。

由於您說FUSE代碼的其他部分print沒有任何問題,因此您可能希望在所有print語句前添加調試日志消息( sys.stdout.isatty()repr(sys.stdout)可能是方便),以幫助您了解發生了什么。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM