Хранение значений с использованием os.stat (имя файла) - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь создать вирус только для образовательных целей. Я не планирую распространять это. Его цель - увеличить размер файла до такой степени, чтобы хранилище было заполнено, и замедлить работу компьютера. Он печатает размер файла каждые 0,001 секунды. При этом я также хочу знать, насколько быстро растет файл. Следующий код, похоже, не позволяет ему работать:

class Vstatus():
  def _init_(Status):
    Status.countspeed == True
    Status.active == True
    Status.growingspeed == 0

import time
import os
#Your storage is at risk of over-expansion. Please do not let this file run forever, as your storage will fill continuously.
#This is for educational purposes only.

while Vstatus.Status.countspeed == True:
    f = open('file.txt', 'a')
    f.write('W')
    fsize = os.stat('file.txt')
    Key1 = fsize
    time.sleep(1)
    Key2 = fsize
    Vstatus.Status.growingspeed = (Key2 - Key1)
    Vstatus.Status.countspeed = False

while Vstatus.Status.active == True:
     time.sleep(0.001)
     f = open('file.txt', 'a')
     f.write('W')
     fsize = os.stat('file.txt')
     print('size:' + fsize.st_size.__str__() + ' at a speed of ' + Vstatus.Status.growingspeed + 'bytes per second.')

Это ТОЛЬКО для образовательных целей

Основная ошибка, которую я получаю, когда запускаю файл, здесь:

TypeError: неподдерживаемые типы операндов для -: 'os.stat_result' и 'os.stat_result'

Что это значит? Я думал, что os.stat вернул целое число. Могу ли я исправить это?

1 Ответ

0 голосов
/ 18 января 2019
Vstatus.Status.growingspeed = (Key2 - Key1)

Вы не можете вычесть os.stat объекты. У вашего кода также есть некоторые другие проблемы. Ваши циклы будут выполняться последовательно, это означает, что ваш первый цикл будет пытаться оценить, насколько быстро записывается файл, не записывая ничего в файл.

import time  # Imports at the top 
import os

class VStatus:
    def __init__(self):  # double underscores around __init__
        self.countspeed = True  # Assignment, not equality test
        self.active = True
        self.growingspeed = 0

status = VStatus()  # Make a VStatus instance

# You need to do the speed estimation and file appending in the same loop

with open('file.txt', 'a+') as f:  # Only open the file once
    start = time.time()  # Get the current time
    starting_size = os.fstat(f.fileno()).st_size
    while status.active:  # Access the attribute of the VStatus instance
        size = os.fstat(f.fileno()).st_size  # Send file desciptor to stat
        f.write('W')  # Writing more than one character at a time will be your biggest speed up
        f.flush()  # make sure the byte is written
        if status.countspeed:
            diff = time.time() - start
            if diff >= 1:  # More than a second has gone by
                status.countspeed = False
                status.growingspeed = (os.fstat(f.fileno()).st_size - starting_size)/diff  # get rate of growth
        else:
            print(f"size: {size} at a speed of {status.growingspeed}")
...