2016-01-14 2 views
0

У меня есть куча скриптов python, я вызываю из родительского скрипта python, но мне грозит проблема с использованием переменных сценариев, которые я вызывал в родительском скрипте python. Пример сценария:paseon's execfile() проблема с переменной scope

parent.py:

eventFileName = './0426_20141124T030101Z_NS3_T1outside-TEST-NS3.csv' 
execfile('./parser.py') 
print(experimentID) #I was hoping 0426 will be printed to screen but I am getting an error: global name 'experimentID' is not defined 

./parser.py:

fileNameOnly = (eventFileName).split('/')[-1] 
experimentID = fileNameOnly.split('_')[0] 

какие-либо предложения? (Выше всего лишь пример случая, я работаю)

+1

не может дублировать. Вы уверены, что выполняете файл, который, как вы думаете, вы? –

+0

@ IgnacioVazquez-Abrams Извините, исправлено имя переменной 'eventFileName' в' parent.py'. Вы должны иметь возможность запускать оба файла. Но вопрос в том, что я не могу использовать 'experimentID' в' parent.py', который изначально заселен в 'parser.py'. –

ответ

2

Короче говоря, вы не можете просто установить/изменить локальные переменные в execfile() - от execfile() docs:

Примечание Местные жители по умолчанию действуют как описано для locals функций() ниже: не следует пытаться модифицировать словарь locals по умолчанию. Передайте явный словарь locals, если вам нужно увидеть эффекты кода на локалях после возврата функции execfile(). execfile() нельзя надежно использовать для изменения локальных функций.

Для получения более полного ответа см. this.

Если вы действительно хотите установить глобальной переменными, вы можете вызвать execfile() с явными глобал аргументом, как описано в this answer:

eventFileName = './0426_20141124T030101Z_NS3_T1outside-TEST-NS3.csv' 
execfile('./b.py', globals()) 
print experimentID 

Если вы действительно хотите установить переменный, которая местного в parent.py, то вы можете передать явно через местные словарь для execfile():

eventFileName = './0426_20141124T030101Z_NS3_T1outside-TEST-NS3.csv' 
local_dict = locals() 
execfile('./b.py', globals(), local_dict) 
print(local_dict["experimentID"]) 
+0

Отлично. Прекрасно работает :-) –

Смежные вопросы