Хотел создать самоповторяющийся файл, но не получилось 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)