Доступ к пространству имен Python из другого процесса Python - PullRequest
0 голосов
/ 18 марта 2019

Допустим, у меня есть следующий скрипт 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.py globals().import counter чем-то полезно?

РЕДАКТИРОВАТЬ: если возможно, можно ли script.py вывод globals обновлять с каждым шагом i в цикле for?

1 Ответ

1 голос
/ 18 марта 2019

Проблема с 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())
...