簡體   English   中英

將實時輸出保存到python文件中

[英]Saving live output to file in python

這需要花整整一天的時間來弄清楚為什么它不起作用。 這是Python 3.6。

目標是從命令行捕獲進度,以示例為例。 切細將逐行輸出進度。

使用Python子進程時,似乎無法將任何輸出保存到文件中。 我這樣做:

   cmd_str="sudo shred -v /dev/sde"
   f="/test.log"

   with Popen(cmd_str, stdout=f, bufsize=1, universal_newlines=True) as p:
       for line in p.stdout:
           print(line, end='') 

但是它生成了一個錯誤消息:FileNotFoundError:[Errno 2]沒有這樣的文件或目錄:'sudo shred -v / dev / sde':'sudo shred -v / dev / sde'對我來說毫無意義。

簡而言之,我希望將新的輸出行附加到文件並關閉它。 這樣,外部程序可以檢查日志文件以查看進度。

我只是觀察到,當我使用tee來查看它是否正在記錄日志時,即使創建了日志文件,它也未記錄到文件中。

更新:我已經嘗試了該站點中所有可能的解決方案,但沒有任何效果。 我開始考慮是否與進度條無法發送到stdout有關? 這些已嘗試但仍無法正常工作:

子流程命令的實時輸出

進程運行時不斷打印子進程輸出

絕對建議拆分令牌,您可能需要使用shell=True來獲取sudo

   cmd_str="sudo shred -v /dev/sde"
   f="/test.log"

   with Popen(cmd_str.split(), shell=True, stdout=open(f, 'w'), bufsize=1, universal_newlines=True) as p:
       for line in p.stdout:
           print(line, end='')

暫無
暫無

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

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