Как запустить файл Python из другого надежно? - PullRequest
1 голос
/ 04 июня 2019

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

Проблема в том, что некоторые файлы будут обрабатывать конфиденциальную информацию, такую ​​как пароли, поэтому я не знаю, делаю ли я это безопасно. В идеале после выполнения 1 файла он должен сам закрыться и удалить все переменные из памяти и освободить это пространство, как обычно, как если бы я просто выполнял 1 файл, проблема в том, что я не знаю, Я называю несколько файлов, вложенных друг в друга, это относится. Очевидно, что очищается только файл, который выполняется, а не тот, который активен, но я не знаю, так ли это.

Я так называю свои модули

os.system('python3 ' + filename)

И в каждом файле впоследствии один и тот же код, вызывающий другой файл с os.system, образуя вложенную или сцепленную систему вызовов.

Например, если я вызываю первый файл из оболочки:

python3 file1.py

, а затем file1 вызывает:

os.system('python3 file2.py')

, а затем file2 вызывает:

os.system('python3 file3.py')

Я бы хотел, чтобы file3 был очищен из памяти и полностью закрыт после его запуска, тогда как file2 и file1 все еще могут быть активны. Я не хочу, чтобы file3 оставался в памяти после того, как он сам себя выполнил. Поэтому, если file3 работает с паролями, он, очевидно, должен удалить их из памяти после запуска.

Как это сделать?

Я читал о нескольких вариантах:

from subprocess import call
call(["python3", "file2.py"])

import subprocess
subprocess.call("file2.py", shell=True)

execfile('file2.py')

import subprocess
subprocess.Popen("file2.py", shell=True)

Какой из них безопаснее?

1 Ответ

1 голос
/ 04 июня 2019

Python сильно полагается на понятие импорта.Вы не должны пытаться заново изобрести колесо на этом.Просто импортируйте ваши скрипты из основного скрипта и используйте функции для их запуска.Если вы хотите быть уверены, что переменные отбрасываются, вы должны включить оператор del в конце функций или как только переменная больше не используется.

С другой стороны, ваша проблема с паролем имеет недостатки изначало.Если файл .py содержит пароль в виде обычного текста, его нет, он никогда не будет защищен ни при каких обстоятельствах.Вы должны реализовать секрет: посмотрите эту тему: Мне нужно безопасно хранить имя пользователя и пароль в Python, какие у меня есть варианты?

...