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()

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

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

4

4 回答 4

10

您应该将这些文件放在 Python 路径中的某个位置,然后导入它们。这就是import声明的目的。顺便说一句:与您的主程序相同的目录位于 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()
于 2012-06-13T02:03:43.290 回答
2

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

openPyFile=execfile

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

于 2012-06-13T02:29:59.580 回答
1
>>> from bt_test import bt_test
>>> bt_test()
于 2012-06-13T02:05:37.973 回答
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)

祝你好运。

于 2012-06-13T03:03:31.793 回答