Выполнить файл python из другого скрипта python, ошибка, если файл python имеет вложенную функцию - PullRequest
0 голосов
/ 31 января 2020

Я создаю сценарий python для чтения и записи I2 C. Сценарий также обрабатывает тестовые сценарии (также в python) для отправки оборудования. Тестовые сценарии ранее отправлялись через GUI, но мой сценарий игнорирует использование GUI и напрямую обращается к драйверу I2 C. Если тестовые сценарии плоские, нет проблем. Однако, если есть вложенная функция или глобальная переменная, есть ошибка:

def main():
    board=usb2any()
    board.ReadI2C(0x58,0x0)
    board.WriteI2C(0x58,0xBC,0x40)
    execfile(f1)
if __name__ == "__main__":
    main()

Тестовый код "f1", если он содержит только коды, подобные приведенным ниже, работает нормально

board.ReadI2C(0x58,0x2)
board.WriteI2C(0x58,0x20,0x10)

если это выглядит так: пример тестового сценария 1

V1=0
def fun1():
    if V1==1: # error here saying global variable V1 not defined

Другой пример неудачного случая: пример тестового сценария 2

ff(0x10,0x9)
def ff(v1,v2):
    fun2(v1)   #Error here saying fun2 not defined

def fun2 (vv): vv = 0

Есть идеи, как это решить? предпочитайте не трогать тестовые сценарии, потому что они были использованы с GUI.

Ответы [ 3 ]

0 голосов
/ 31 января 2020

Пример 2 нуждается в некоторой перестановке, поэтому вы определяете функции перед их вызовом. Возможно, вы захотите создать класс, если вы вызываете множество функций друг от друга.

def fun2(vv): 
    vv=0

def ff(v1,v2): 
    fun2(v1)

`

0 голосов
/ 01 февраля 2020

Вот что работает, а что нет: для примера 1 тестового скрипта необходимо добавить глобальный в глобальный тестовый скрипт V1 V1 = 0 def fun1 (): если V1 == 1: # сейчас нет ошибки

Еще один пример неудачного случая: пример 2 тестового сценария, который смещает последовательность, все еще не удался

def fun2(x):
    x = 0

def ff(vv):
    fun2(vv)
ff(2) #when calling ff, error saying no fun2 defined

Информация о распечатке:

Трассировка (последний последний вызов):

Файл "c: \ Users \ a0272122 \ Documents \ Python Scripts \ I2C_USB2Any \ i2c_wr.py", строка 68, в main ()

Файл "c: \ Users \ a0272122 \ Documents \ Python Сценарии \ I2C_USB2Any \ i2c_wr.py ", строка 42, в главном исполняемом файле (имя файла)

Файл" pattern_test.py ", строка 122, в apb_read_modifywrite (0x1A4, 0x000000E0 , 0x00000020)

Файл "pattern_test.py", строка 113, в apb_read_modifywrite read_data = apb_read_reg (addr16b)

NameError: глобальное имя 'apb_read_reg' не определено

0 голосов
/ 31 января 2020

Пример 2 не работает, потому что вы вызываете функцию перед ее объявлением. Попробуйте вместо этого:

def ff(v1,v2): 
    fun2(v1) 
ff(0x10,0x9)
...