Хотел создать самоповторяющийся файл, но не получилось PYTHON

base.txt

import sys, os, time

cwd = os.getcwd()

code_file = "base.txt"
code_file = os.path.join(cwd, code_file)

my_name = sys.argv[0]
doter_name = os.path.join(os.getcwd(), 'clone' + (str(int(my_name.replace('clone', '').replace('.py', '').replace(cwd+'\\', ''))+1)) + '.py')

with open(doter_name, 'w') as f:
    with open(code_file) as readfile:
        f.write(readfile.read())

    time.sleep(1)

    os.system('python '+doter_name)

clone1.py

import sys, os, time

cwd = os.getcwd()

code_file = "base.txt"
code_file = os.path.join(cwd, code_file)

my_name = sys.argv[0]
doter_name = os.path.join(os.getcwd(), 'clone' + (str(int(my_name.replace('clone', '').replace('.py', '').replace(cwd+'\\', ''))+1)) + '.py')

with open(doter_name, 'w') as f:
    with open(code_file) as readfile:
        f.write(readfile.read())

    time.sleep(1)

    os.system('python '+doter_name)

Я запускаю код, но почему-то файл, который создала программа не запускается (не создает clone3.py и тд) Как можно исправить?


Ответы (1 шт):

Автор решения: Andy Pavlov

Все из-за того, что в такой постановке буфер еще не записался на диск, а процесс записи будет произведет по закрытию.

import sys, os, time

cwd = os.getcwd()

code_file = "base.txt"
code_file = os.path.join(cwd, code_file)

my_name = sys.argv[0]
doter_name = os.path.join(os.getcwd(), 'clone' + (str(int(my_name.replace('clone', '').replace('.py', '').replace(cwd+'\\', ''))+1)) + '.py')

with open(doter_name, 'w') as f:
    with open(code_file) as readfile:
        f.write(readfile.read())

time.sleep(15)

os.system('python '+doter_name)

Либо нужно явно указать запись буфера в виде f.flush():

with open(doter_name, 'w') as f:
    with open(code_file) as readfile:
        f.write(readfile.read())

    f.flush()
    time.sleep(15)

    os.system('python '+doter_name)
→ Ссылка