Безопасно ли вызывать os.unlink (__ file__) в Python? - PullRequest
3 голосов
/ 01 декабря 2011

Я использую Python 2.6 в Linux.

У меня есть скрипт run.py, который запускает несколько служб в фоновом режиме и генерирует kill.py для уничтожения этих процессов.

Внутриkill.py, безопасно ли отсоединять себя, когда он выполнит свою работу?

import os
# kill services
os.unlink(__file__)
# is it safe to do something here?

Я новичок в Python.Меня беспокоило то, что, поскольку Python является языком сценариев, весь сценарий может отсутствовать в памяти.После того, как он не будет связан, больше не будет никакого кода для интерпретации.

Я пробовал этот небольшой тест.

import os
import time
time.sleep(10)       # sleep 1
os.unlink(__file__)
time.sleep(10)       # sleep 2

Я запускал stat kill.py, когда запускался этот файл и количество ссылоквсегда был 1, так что я думаю, что интерпретатор Python не содержит ссылку на файл.

В качестве вопроса более высокого уровня, как обычно можно легко создать список процессов, которые впоследствии будут уничтожены?

Ответы [ 5 ]

2 голосов
/ 01 декабря 2011

Не заставляйте ваши скрипты писать новые скрипты, если вы можете избежать этого - просто напишите список PID, а затем через них.Не совсем понятно, что вы пытаетесь сделать, но создание и удаление скриптов звучит как слишком хрупкая магия.

Чтобы ответить на вопрос: Python компилирует весь исходный код и закрывает файл перед его выполнением,это безопасно.

Как правило, отмена открытия открытого файла безопасна в Linux.(Но не везде: в Windows вы не можете удалить используемый файл.)

Обратите внимание, что когда вы import модуль, Python 2 компилирует его в файл .pyc байт-код и интерпретирует это,Если вы удалите файл .py, Python все равно будет использовать .pyc, и наоборот.

1 голос
/ 01 декабря 2011

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

Я бы поместил PID в list и повторилчто с os.kill.Я не понимаю, почему вы создаете и выполняете новый сценарий для этого.

1 голос
/ 01 декабря 2011

Только не звоните перезагрузите !

Python не нуждается в блокировке файлов, поскольку они компилируются и загружаются во время импорта. Действительно, возможность менять файлы во время работы программы часто очень полезна.

1 голос
/ 01 декабря 2011

IIRC (!): Когда в * nix unlink удаляет только имя в файловой системе, индекс удаляется, когда закрывается последний дескриптор файла. Поэтому это не должно вызывать каких-либо проблем, за исключением того, что python пытается повторно открыть файл.

0 голосов
/ 01 декабря 2011

Python считывает весь исходный файл и компилирует его перед выполнением, поэтому вам не нужно беспокоиться об удалении или изменении файла запущенного скрипта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...