0

インタープリターを介して毎回相対ファイルパスを指定せずに、作業ディレクトリの外部から execfile() を介して Python スクリプトを呼び出すことができる必要があります。

それ以外の:

execfile("..\\UserScripts\\HelloWorld.py")

私は電話する必要があります:

execfile("HelloWorld.py")

これを機能させるためにこれを追加できるsys.pathはありますか?作業ディレクトリとファイルの場所と同様に、ディレクトリは固定されています。ユーザーがファイルを UserScripts ディレクトリにドロップし、相対ファイル パスなしでインタープリターを介して呼び出すことができることが期待されます。

4

2 に答える 2

1

以下のスクリプトは、HelloWorld.py が実行可能ファイルと同じディレクトリにあることを前提としています。

import os.path
import sys

execfile(os.path.join( os.path.dirname(sys.argv[0]), 'HelloWorld.py'))

ただし、スニペットを保持するサブディレクトリがある場合 ('../UserSnippets' と呼びましょう)、execfile を含むスクリプトへの相対パスを指定できます。

execfile(os.path.join( os.path.dirname(sys.argv[0]), '..','UserSnippets','HelloWorld.py'))

os.path.join を使用すると、コードの移植性が保たれます (Mac でのみテストしたことを願っています)。

于 2016-07-14T03:42:54.413 に答える
0

execscriptユーザースクリプトを実行するスコープに追加できる別の名前 (たとえば ) を使用することを強くお勧めします。

scope.SetVariable("execscript", (CodeContext context, string filename) => {
    Builtins.execfile(context, Patch.Combine("../../Scripts", filename));
});

これにより、ビルトイン辞書をいじることなく、ビルトインとして表示されます。

そうしなければならない場合execfile、最善の策は、execfileビルトインを、ディレクトリにパッチを当ててから古い .xml を呼び出すものに置き換えることexecfileです。以下は、完全にテストされていない、コンパイルされていないコードで、正しい方向を示しています。

var engine = Python.CreateEngine();
var builtins = engine.GetBuiltinModule();
builtins.SetVariable("execfile", (CodeContext context, string filename) => {
    Builtins.execfile(context, Patch.Combine("../../Scripts", filename));
});
于 2014-02-28T13:00:26.110 に答える