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