【问题标题】:How do I execute all the code inside a python file?如何执行 python 文件中的所有代码?
【发布时间】:2012-06-13 02:01:27
【问题描述】:

如何执行 python 文件中的所有代码,以便可以在当前代码中使用 def?我有大约 100 个脚本,它们都像下面的脚本一样编写。

举个简单的例子,我有一个名为:

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

【问题讨论】:

    标签: python file import


    【解决方案1】:

    您应该将这些文件放在 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()
    

    【讨论】:

    • 这就是我要做的事情,但是 bt_test() 在它自己的文件中调用 addFive(),而不是 bt_test.addFive(),我没有时间去通过我所有的脚本并更改所有的 def 调用。有办法解决吗?
    • @user1452567 - 是什么让你认为这会导致它不起作用?
    • 这是我制作的快速视频的链接,可以更好地解释我的问题。希望这会有所帮助。 dl.dropbox.com/u/1612489/pythonHelp.mp4
    【解决方案2】:

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

    openPyFile=execfile
    

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

    【讨论】:

      【解决方案3】:

      除了 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)

      祝你好运。

      【讨论】:

        【解决方案4】:
        >>> from bt_test import bt_test
        >>> bt_test()
        

        【讨论】:

          猜你喜欢
          • 2015-10-20
          • 2020-09-18
          • 1970-01-01
          • 2017-02-28
          • 1970-01-01
          • 2015-05-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多