如何在python文件中执行所有代码?

时间:2012-06-13 02:01:28

标签: python file import

如何在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()

有谁知道为什么这不起作用?

这是一个快速视频链接,可以帮助解释正在发生的事情。 https://dl.dropbox.com/u/1612489/pythonHelp.mp4

4 个答案:

答案 0 :(得分: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()

答案 1 :(得分:2)

execfile不起作用的原因是因为bt_test内的函数受openPyFile函数范围的限制。一个简单的测试是尝试从bt_test()内部运行openPyFile。由于openPyFile除了execfile之外没有真正做任何事情你可以完全摆脱它,或者你可以别名execfile

openPyFile=execfile

注意将文件放在你的python路径中并导入它绝对是你最好的选择 - 我只在这里发布这个答案,希望能指出为什么你没有看到你想看的东西。

答案 2 :(得分:1)

>>> from bt_test import bt_test
>>> bt_test()

答案 3 :(得分:1)

除了Ned的回答之外,如果您不希望硬编码文件名,__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)

祝你好运。