Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.58/55: Рейтинг темы: голосов - 55, средняя оценка - 4.58
0 / 0 / 0
Регистрация: 22.07.2017
Сообщений: 20

Скрипт копирующий сам себя

08.08.2017, 15:27. Показов 11127. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Мне нужно написать скрипт, который будет создавать копию файла из которого он запущен. Прямой пример - есть файл test.py, запустив который он создаст свою же копию. Но я не знаю как это сделать. Знаю что скорее всего понадобится модуль os чтобы работать с текущим файлом.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.08.2017, 15:27
Ответы с готовыми решениями:

Как создать ZIP-архив, который распаковывается сам в себя много раз?
Как можно сделать на python ZIP-архив, который распаковывается сам в себя много раз? Спасибо.

Как сделать, чтобы скрипт удалил сам себя?
Доброго времени суток помогите разобраться: есть два пользователя, скрипт запускается su -c ./name.sh info &> /dev/null & ...

как сделать чтобы скрипт vbs сам себя добавлял в автозагрузку
люди помогите ПЛИИИИИИИИИИИИИИИЗ как сделать, чтобы скрипт vbs(ниже) при запуске сам себя добавлял в автозагрузку ...

6
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
08.08.2017, 16:21
Лучший ответ Сообщение было отмечено chelovekfromhel как решение

Решение

И чего тут сложного?
Скрипт тот же файл. Копировать файлы вы же умеете?

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import sys
import os
 
destdir = os.path.abspath('destdir')
if not os.path.exists(destdir):
    os.makedirs(destdir)
 
# с использованием системного shell'а  
os.system('copy %s %s' % (__file__,destdir))
# другой вариант - с получением полного имени скрипта через sys.argv[0]
os.system('copy %s %s' % (sys.argv[0],destdir))
 
# без shell'а
dirname,filename = os.path.split(__file__)
content = open(__file__).read()
open(os.path.join(destdir,filename),'w').write(content)
P.S. И еще 100500 вариантов можно написать.

Добавлено через 20 минут
Python
1
2
3
4
from shutil import copyfile,copy
 
copy(__file__, destdir) # копируем в указанную директорию
copyfile(__file__, os.path.join(destdir,filename)) # копируем по полному пути нового расположения
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
09.08.2017, 11:45
Цитата Сообщение от Garry Galler Посмотреть сообщение
# без shell'а
dirname,filename = os.path.split(__file__)
content = open(__file__).read()
open(os.path.join(destdir,filename),'w') .write(content)
Файлы не закрыли.

А следующим будет вопрос, как скопировать exe, в котором и сидит питоновский скрипт. Вирусописатели совсем обленились.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
09.08.2017, 12:35
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Файлы не закрыли.
Дескриптор нигде не сохраняется.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
09.08.2017, 13:06
Хм, забавно, видимо сборщик мусора или ещё кто видит, что на дескриптор нет ссылок и закрывает файл.

Python
1
2
f = open(__file__)
input('>')
Bash
1
2
python 1.py &
[1] 3673
Bash
1
2
lsof -p 3673
python  3673  fox    3r   REG    8,1      120 1884161 /home/fox/1.py
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
09.08.2017, 13:23
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
или ещё кто видит
В вашем случае это сборщик мусора закрыл все после завершения скрипта.
В моем коде на дескрипторы вообще нет явных ссылок в коде - сборщику там делать нечего, система сама возвращает их в свой пул. Насколько быстро - отдельный вопрос. В любом случае если вы не создаете их 100500, то системного ограничения

ваш процесс вряд ли достигнет.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
09.08.2017, 14:17
Хотя, нет, тут я неправ насчет того, в моем коде GC делать нечего. На самом деле здесь он тоже срабатывает, причем как пишут, сразу же:
Когда ссылка на объект удаляется (при вызове Py_DECREF), Python всегда проверяет, не достиг ли счетчик ссылок на этот объект нуля. В этом случае будет вызван деаллокатор данного объекта...

C
1
2
3
4
5
6
7
8
#define Py_DECREF(op)                                   \
    do {                                                \
        if (_Py_DEC_REFTOTAL  _Py_REF_DEBUG_COMMA       \
        --((PyObject*)(op))->ob_refcnt != 0)            \
            _Py_CHECK_REFCNT(op)                        \
        else                                            \
        _Py_Dealloc((PyObject *)(op));                  \
    } while (0)
Добавлено через 30 минут
----------------------------------------
Кстати, вот есть такой интересный способ проверить прямо из кода присутствуют ли в нем ссылки на файловые объекты:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import io,gc,os,sys
 
content = open(__file__).read()
open(os.path.join(destdir,filename),'w').write(content)
 
for f in [o for o in gc.get_objects() if isinstance(o, io.TextIOWrapper)]:
    print(f)
 
print('-' *20)
# явно записываем ссылку в переменную
fd = open(__file__)
content = fd.read())
 
for f in [o for o in gc.get_objects() if isinstance(o, io.TextIOWrapper)]:
    print(f)
Code
1
2
3
4
5
6
7
8
<_io.TextIOWrapper name='<stdin>' mode='r' encoding='cp866'>
<_io.TextIOWrapper name='<stdout>' mode='w' encoding='cp866'>
<_io.TextIOWrapper name='<stderr>' mode='w' encoding='cp866'>
--------------------
<_io.TextIOWrapper name='D:\\INSTALL\\Python3\\PROJECTS\\create_copy_script.py' mode='r' encoding='cp1251'>
<_io.TextIOWrapper name='<stdin>' mode='r' encoding='cp866'>
<_io.TextIOWrapper name='<stdout>' mode='w' encoding='cp866'>
<_io.TextIOWrapper name='<stderr>' mode='w' encoding='cp866'>
Как видим, в первом случае ничего кроме стандартных дескрипторов нет. А вот во втором, где ссылка на файл явно записана в переменную - есть.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.08.2017, 14:17
Помогаю со студенческими работами здесь

Троян, постоянно копирующий себя в оперативную память
Суть проблемы. Изначально мой антивирус(nod23) начал постоянно блокировать какой-то троян, постоянно копирующий себя в оперативную память и...

Автоматическая хранимая процедура Insert: сам создал - сам на себя ругается
Почему при автоматическом создании SP (хранимых процедур) с исп. insert, он генерирует их уже кривыми? Вот автоматически сгенерированная...

Копирование файла из директории, в которой находится сам копирующий батник
У меня такая проблема: Мне нужно чтобы мой батник копировал файл из текущей директории (Без указания пути типа: C:/test/file.exe) ...

Скрипт Powershell, копирующий файлы на Linux
Необходимо написать скрипт на powershell, который будет копировать файлы по протоколу SFTP на линукс сервер(Debian). Дайте предложения по...

Помогите написать скрипт, копирующий файлы в списке
Имеется список Files.txt Имеется путь /home/User/abc. Нужно чтобы скрипт читал построчно .txt, и сверял с содержимым директории abc. В...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru