0

現在のコードで def を使用できるように、Python ファイル内のすべてのコードを実行するにはどうすればよいですか? 以下のスクリプトのように書かれた約 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です。簡単なテストの 1 つはbt_test()、 内から実行することopenPyFileです。execfileopenPyFile は、完全に削除するか、エイリアスを作成する以外に、実際には何もしないため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()文字列オブジェクトとして渡され、インタープリターがその識別子を解決するために使用する方法が何であれ、正しい名前空間を調べません。

bt_press()1)モジュールを前に付けて渡してみてください:cmds.button(l='print', c='bt_test.bt_press()')

c2)関数オブジェクトに直接バインドできるかどうかを確認します。cmds.button(l='print', c=bt_press)

幸運を。

于 2012-06-13T03:03:31.793 に答える