Допустим, у меня есть следующий скрипт Python script.py:
a = 1
b = 10
for i in range(b):
a += 1
print(a)
Я знаю, что могу использовать globals() внутри этого script.py, чтобы показать пространство имен:
{'__file__': 'counter.py', '__doc__': None, 'i': 9, '__spec__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000027C8D9402E8>, '__name__': '__main__', '__cached__': None, 'b': 10, 'a': 11, '__package__': None, '__builtins__': <module 'builtins' (built-in)>}
Интересно, можно ли как-то подражать globals() из-за пределов script.py? Другими словами, я хочу запустить other_script.py и посмотреть результат script.pyglobals(). Является ли import counter чем-то полезным?
Обновлено: если возможно, можно ли обновлять вывод script.pyglobals с каждым приращением i в цикле for?
script.py и other_script.py — совершенно разные процессы.
Это может быть проблемой, зависящей от ОС, поскольку вы хотите, чтобы один процесс обращался к памяти другого. Есть способы сделать это, но очень немногие простые. Мой совет — не изобретать велосипед: используйте базу данных (простое хранилище k/v должно подойти, как Redis) или настройте простой Http-сервер в своем хост-скрипте.






Проблема с import counter заключается в том, что пространство имен внутри counter.py будет изменено на ваше текущее пространство имен, поскольку вы импортируете его в свое текущее пространство имен.
Однако, если все, что вы хотите сделать, это просто увидеть вывод counter.py, вы можете просто использовать функцию exec(), чтобы выполнить его отдельно. Это не изменит его пространство имен.
Пример:
В counter.py:
a = 1
b = 10
for i in range(b):
print('\na = ', a)
print('globals = ', globals())
a += 1
print('\na = ', a)
print('globals = ', globals())
В other_script.py:
exec(open('counter.py').read())
Спасибо за ответ. Предположим, что в файле counter.py нет операторов печати. Можно ли еще увидеть значения переменных a, b и i? Текущий подход с exec(open('counter.py').read()) дает пустой вывод.
Можете ли вы дать более подробную информацию о развертывании?
script.pyиother_script.pyзапускаются отдельно (то есть как совершенно отдельные процессы) или вы предполагаете, что один запускает другой? Я не думаю, что в качестве полностью ускоренных процессов вы сможете многое сделать, но у вас могут быть некоторые варианты, если один из них является подпроцессом другого, использующим многопроцессорный модуль python.