2012-06-13 3 views
0

Как выполнить весь код внутри файла python, чтобы я мог использовать def в моем текущем коде? У меня около 100 скриптов, которые были написаны, как сценарий ниже.Как выполнить весь код внутри файла python?

Для простого примера, у меня есть файл питона под названием:

D: /bt_test.py

Его код выглядит следующим образом:

def bt_test(): 
    test = 2; 
    test += addFive(test) 
    return(test) 

def addFive(test): 
    return(test+5) 

Теперь, я хочу от совершенно новый файл, запустите bt_test()

Я попытался сделать это:

def openPyFile(script): 
    execfile(script) 

openPyFile('D:/bt_test.py') 
bt_test() 

Но это не работает.

Я пытался делать это так:

sys.path.append('D:/') 
def openPyFile(script): 
    name = script.split('/')[-1].split('.')[0] 
    command = 'from ' + name + ' import *' 
    exec command 

openPyFile('D:/bt_test.py') 
bt_test() 

Кто-нибудь знает, почему это не работает?

Вот ссылка на видеоролик Quicktime, который поможет объяснить, что происходит. https://dl.dropbox.com/u/1612489/pythonHelp.mp4

ответ

1

В дополнение к ответом Неда __import__() может быть полезна, если вы не хотите, чтобы имена файлов были жестко запрограммированы.

http://docs.python.org/library/functions.html#__import__

Обновление на основе видео.

У меня нет доступа к Maya, но я могу попробовать и спекулировать.

cmds.button(l='print', c='bt_press()') где проблема, похоже, скрывается. bt_press() передается как строковый объект, и каким бы способом интерпретатор не использовал этот идентификатор, он не выглядит в правом пространстве имен.

1) Попробуйте прохождение bt_press() с модулем предварённым: cmds.button(l='print', c='bt_test.bt_press()')

2) Смотрите, если вы можете связать c непосредственно к объекту функции: cmds.button(l='print', c=bt_press)

удачи.

10

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

# Find and execute bt_test.py, and make a module object of it. 
import bt_test 

# Use the bt_test function in the bt_test module. 
bt_test.bt_test() 
+0

Вот как бы я это сделал, однако bt_test() вызывает addFive() внутри собственного файла, а не bt_test.addFive(), и у меня нет времени, чтобы пройти через все мои скрипты и измените все вызовы def. Есть ли способ обойти это? – tylerART

+1

@ user1452567 - Почему вы думаете, что это не сработает? – weronika

+0

Вот ссылка на видеоролик QuickTime, который я объяснил своей проблемой намного лучше. Надеюсь, это поможет. https://dl.dropbox.com/u/1612489/pythonHelp.mp4 – tylerART

1
>>> from bt_test import bt_test 
>>> bt_test() 
2

Причина, по которой execfile не работает потому, что функции внутри bt_test ограничены области действия функции openPyFile. Один простой тест - попытаться запустить bt_test() изнутри openPyFile. Поскольку openPyFile не делает ничего, кроме execfile вы могли бы избавиться от него полностью, или вы могли бы псевдоним execfile

openPyFile=execfile 

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

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