2016-07-18 16 views
1

Erstes Modul:Bestimmung relativer Pfad in Perl-Modul

package Compute; 

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

zweite Modul:

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`; 

Oben ist ein Beispiel für ein Perl-Modul habe ich geschrieben. Es ruft das Python-Skript von anderen Modulen auf und übergibt es in den notwendigen Argumenten/Parametern.

Ich habe versucht, den tatsächlichen Pfad des Skripts zu entfernen und es durch "./python_script.py" zu ersetzen, aber es scheint nicht zu funktionieren.

Ich habe versucht, das Verzeichnis beim Ausführen des Skripts mit Cwd zu drucken, es zeigt auf mein Home-Verzeichnis.

Welche anderen Möglichkeiten kann ich versuchen, einen relativen Pfad zum Skript zu haben?

Antwort

3

Ich denke, Sie fragen, wie ein Skript ausgeführt wird, das sich im selben Verzeichnis befindet wie das Modul, das es ausführt.

use Path::Class qw(file); 

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

oder

use File::Basename qw(dirname); 

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

oder

use Dir::Self qw(__DIR__); 

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

__FILE__ ist ein spezieller Token, das den Pfad zu der Datei zurückkehrt, in der das Symbol befindet.

+0

Related: https://metacpan.org/pod/Dir::Self – melpomene

+0

Sorry, ich bin neu in Perl. Zur Verwendung Path :: Class qw (Datei); Muss ich "Datei" durch den Dateinamen ersetzen? –

+0

Nein, es ist der Name einer Funktion, die ein Path :: Class :: File-Objekt erstellt. Jeder Snippet, den ich gepostet habe, kann so verwendet werden, wie er ist, um einen verwendbaren Pfad in '$ qfn' zu erzeugen (was einem" qualifizierten Dateinamen "entspricht, was einen absoluten oder relativen Pfad zu einer Datei bedeutet). Wie ich unten erklärt habe, wird '__FILE__' automatisch durch den Pfad zu der Datei ersetzt, in der sich das Snippet befindet. – ikegami