2012-12-10 95 views
3

我需要設置一些測試條件來模擬填滿的磁盤。我創建了以下簡單地寫垃圾磁盤:Python填充磁盤

#!/usr/bin/python 

import os 
import sys 
import mmap 

def freespace(p): 
    """ 
    Returns the number of free bytes on the drive that ``p`` is on 
    """ 
    s = os.statvfs(p) 
    return s.f_bsize * s.f_bavail 

if __name__ == '__main__': 

    drive_path = sys.argv[1] 
    output_path = sys.argv[2] 

    output_file = open(output_path, 'w') 

    while freespace(drive_path) > 0: 
     output_file.write("!") 
     print freespace(drive_path) 
     output_file.flush() 

    output_file.close() 

就通過查看從自由空間的返回值,因爲我所知道的,寫方法不寫文件,直到它被關閉,從而使同時條件無效。

有沒有辦法將數據直接寫入文件?或者另一種解決方案?

+0

嘗試'os.fsync'寫的變化和您使用的等待它 –

+0

哪個操作系統? – NPE

+0

我正在使用OSX .. –

回答

2

這是未經測試,但我想東西沿着這些路線將是填補了硬盤的最快方法容易

import errno 

write_str = "!"*1024*1024*5 # 5MB 

output_path = sys.argv[1] 

with open(output_path, "w") as f: 
    while True: 
     try: 
      f.write(write_str) 
      f.flush() 
     except IOError as err: 
      if err.errno == errno.ENOSPC: 
       write_str_len = len(write_str) 
       if write_str_len > 1: 
        write_str = write_str[:write_str_len/2] 
       else: 
        break 
      else: 
       raise 
+0

這需要一個'import sys' – quasiben

0

您可以在寫入時嘗試/捕獲磁盤完整異常。