4

いっぱいになったディスクをシミュレートするために、いくつかのテスト条件をセットアップする必要があります。ディスクにガベージを単純に書き込むために、次を作成しました。

#!/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()

freespace からの戻り値を見る限り、write メソッドはファイルが閉じられるまでファイルを書き込まないため、while 条件が無効になります。

データをファイルに直接書き込む方法はありますか? それとも別の解決策でしょうか?

4

2 に答える 2

4

これはテストされていませんが、これらの線に沿ったものがディスクを簡単にいっぱいにする最も簡単な方法になると思います

import sys
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
于 2012-12-10T11:47:17.420 に答える
0

書き込み時にディスクがいっぱいの例外を試す/キャッチすることができます。

于 2012-12-10T11:28:43.763 に答える