2016-07-18 20 views
1

最初のモジュール:決定相対パス

package Compute; 

our $sort_script= "/app/scripts/python_script.py"; 

第二のモジュール:

package ProcessRestart; 
use Compute; 

# This perl module is also in /app/scripts/ 
# host1.com is an argument or script parameter 

$returnMsg= `$Compute::sort_script host1.com`; 

以上は私が書かれているPerlモジュールの一例です。 Pythonスクリプトを他のモジュールから呼び出し、必要な引数/パラメータで渡します。

私はスクリプトの実際のパスを入力してそれを "./python_script.py"に置き換えることを試みましたが、動作していないようです。

私はCwdを使ってスクリプトを実行したときにディレクトリを印刷しようとしましたが、これは自分のホームディレクトリを指しています。

他の方法でスクリプトの相対パスを取得できますか?

答えて

3

私はあなたがそれを実行するモジュールと同じディレクトリにあるスクリプトを実行する方法を聞いていると思います。

use Path::Class qw(file); 

my $qfn = file(__FILE__)->dir->file('python_script.py'); 

又は

use File::Basename qw(dirname); 

my $qfn = dirname(__FILE__) . '/python_script.py'; 

又は

use Dir::Self qw(__DIR__); 

my $qfn = __DIR__ . '/python_script.py'; 

__FILE__シンボルが配置されているファイルへのパスを返す特別なトークンです。

+0

関連:https://metacpan.org/pod/Dir::Self – melpomene

+0

申し訳ありませんが、私はperlを使い慣れていません。 Path :: Class qw(file)を使用します。 「ファイル」をファイル名に置き換える必要がありますか? –

+0

いいえ、Path :: Class :: Fileオブジェクトを作成する関数の名前です。私が投稿した各スニペットは、 '$ qfn'("修飾されたファイル名 "の略で、ファイルへの絶対パスまたは相対パスを意味する)に使用可能なパスを生成するためにそのまま使用できます。私が最後に説明したように、 '__FILE__'はスニペットが存在するファイルへのパスに自動的に置き換えられます。 – ikegami