2011-02-15 20 views
0

私のperlスクリプトが存在するのと同じディレクトリにない私のperlスクリプトからexeを実行したいとします。ディレクトリだけでなく、システムのPATHにはありません。 perl自身のパスを設定し、そのexeを実行する方法。 私はenvを設定しようとしましたが、動作しませんでした。別のディレクトリにexeを実行する方法!

のthnx、 カス

+1

私は、あなたが「exeファイル」を述べたように、Windowsのようにこれをタグ付けしました - あなたが実際にDOSを使用していない場合は、より適切に再タグへお気軽にどうぞ/ Windows。将来の参考として、実際にプラットフォームに依存しない質問がない限り、使用しているプラ​​ットフォーム/ OS/etcなどについて言及し、それに応じてタグ付けすることをお勧めします。 –

答えて

3

は、あなたのexeファイルへのフルパスを使用してみてください。例えば

system("/full/path/to/app.exe"); 

は、あなたがこのようなあなたのパスを設定しました:これを設定するには

$path = $ENV{'PATH'}; 

$ENV{'PATH'} = 'some/dir:another/dir'; 
+1

':'をハードコードするのは間違いです。代わりに['$ Config {path_sep}'](http://p3rl.org/Config)を使用してください。 – daxim

+0

@daxim実際、彼がいくつかのランダムな.exeファイルを呼び出すのであれば、とにかく可搬性にはならないでしょう:) –

+0

注意:DOSは ';'を使用しているので、主に移植性に関するものではありません。 – daxim

2

exeファイルがどこにあるあなたが知っている場合

あなたのPATHを取得するにはコマンドラインから実行している場合と同じパスを使用してください。 Perlで:

system('c:\full\path\to\exe\program.exe'); 

またはあなたが(彼らはWindowsカーネルにすべて同じです)スラッシュを使用することを好む場合:

system('c:/full/path/to/exe/program.exe'); 
+0

問題はここでは少し異なります:exe a.exeは私が実行したいファイルで、a.exeはdiffernt pathにあるライブラリのいくつかに依存します。私はこれらのライブラリパスもa.exeをインストールするたびにchange.So私の意図は、i.exeのパスを設定する前にそれらのパスを設定することです。今は、$ ENV {PATH} = "a.exeの依存ライブラリパス"と言っています: "a.exeのパス"は、システムコマンドを呼び出すと動作しません。システムコマンドがシェルを起動し、a.exeを実行すると、システムコマンドの前に親に設定したすべてのパスを取得しません。あなたはそれをするために何か方法はありますか? –

1

あなただけに任意の環境変数を設定する必要はありませんexeを実行します。あなたがする必要があるのは、絶対パスかperlスクリプトを実行するときのディレクトリを基準にしたパスを使ってexeを実行することだけです。

C: 
- dira 
| - a.exe 
- dirb 
    - dirc 
    - a.pl 

とあなたのコマンドプロンプトで実行している:そして

C:\dirb>perl dirc\a.pl 

で(あなたがexeファイルの話をしているので)あなたのようなディレクトリ構造を持っている場合たとえば、これは、Windowsと仮定あなたのperlのファイル、あなたは

`C:\\dira\\a.exe`; 

または

`..\\dira\\a.exe`; 
のいずれかを使用する必要があります

コマンド・プロンプトがある場合:

C:\dirb\dirc>perl a.pl 

、あなたは

`C:\\dira\\a.exe`; 

または

`..\\..\\dira\\a.exe`; 

を使用することができます更新

ファイルtest.pl:

$ENV{'PATH'}.= ':some/dir'; 
system('./testpath.pl'); 

ファイルtestpath.pl:

open(FILE, '>>output.txt'); 
print FILE $ENV{'PATH'}; 
close(FILE); 
+0

単一のスラッシュは、ディレクトリセパレータとしても機能し、エスケープされたバックスラッシュよりもはるかに読みやすくなります。 – daxim

+0

@ダキシム、どちらかと思っていたのですが、確かめるためにテストするのが面倒すぎました^^。 – jswolf19

+0

ここで問題は少し異なります:exe a.exeは私が実行したいファイルで、a.exeはdiffernt pathにあるライブラリのいくつかに依存します。私はこれらのライブラリパスもa.exeをインストールするたびにchange.So私の意図は、i.exeのパスを設定する前にそれらのパスを設定することです。今は、$ ENV {PATH} = "a.exeの依存ライブラリパス"と言っています: "a.exeのパス"は、システムコマンドを呼び出すと動作しません。システムコマンドがシェルを起動し、a.exeを実行すると、システムコマンドの前に親に設定したすべてのパスを取得しません。あなたはそれをするために何か方法はありますか? –

関連する問題