2012-02-23 19 views
0

Microsoft HPCを使用しているクラスタでスクリプトを実行しようとしています。それが私のスクリプト(およびその他の必要なファイル)をネットワークドライブ(V :)のフォルダに持っています。私は、Net Useコマンド(Net Use Z :)を使用して、クラスタ上のコンピュータを/ fooに接続するバッチファイルを使用してスクリプトを実行します。リモートドライブで実行されているperlスクリプトのライブラリの問題

スクリプトを実行すると、
Can't load 'Z:/lib/auto/IO/IO.dll' for module IO: load_file:The specified module could not be found at C:/perl/perl/lib/XSLoader.pm line 71. 
at Z:/lib/IO.pm line 11 
Compilation failed in require at Z:/lib/IO/Handle.pm line 266. 
BEGIN failed--compilation aborted at Z:/lib/IO/Handle.pm line 266. 
Compilation failed in require at Z:/lib/IO/Seekable.pm line 101. 
BEGIN failed--compilation aborted at Z:/lib/IO/Seekable.pm line 101. 
Compilation failed in require at Z:/lib/IO/File.pm line 133. 
BEGIN failed--compilation aborted at Z:/lib/IO/File.pm line 133. 
Compilation failed in require at Z:/lib/FileHandle.pm line 9. 
Compilation failed in require at Z:/lib/Spreadsheet/WriteExcel/OLEwriter.pm line 18. 
BEGIN failed--compilation aborted at Z:/lib/Spreadsheet/WriteExcel/OLEwriter.pm line 18. 
Compilation failed in require at Z:/lib/Spreadsheet/WriteExcel/Workbook.pm line 18. 
BEGIN failed--compilation aborted at Z:/lib/Spreadsheet/WriteExcel/Workbook.pm line 18. 
Compilation failed in require at Z:/lib/Spreadsheet/WriteExcel.pm line 17. 
BEGIN failed--compilation aborted at Z:/lib/Spreadsheet/WriteExcel.pm line 17. 
Compilation failed in require at foo.pl line 9. 
BEGIN failed--compilation aborted at foo.pl line 9. 

このスクリプトは、ローカルで実行するとうまく動作します。私の目的は、HPCクラスタ上でリモートで実行させることです。

私は新しく地元の図書館の所在地を追加することに頭を悩ませていましたが、私はウェブ上で多くの説明がわかりました。私の頭では、私の既存の/ libフォルダを私のリモートドライブ(Z :)にコピーしてから、 'use lib' Z:\ lib;を使うだけで十分です。私のコードでは、それは動作しません。私は、スクリプトが私が現在理解していないライブラリとどうやって相互作用するかという側面があると仮定しています。

ありがとうございます、ありがとうございます。

+0

ローカルマシンでperlを実行していますか? Z:を持っているものだからあなたは 'C:\ perl \ bin \ perl.exe V:\ source \ prog.pl'のようなことをしていますか?私はPerlプログラムがドライブレターを見ることができるかどうか疑問に思います。テストするプログラムと同じフォルダから 'print" OK "と同じようなものを実行します。-f 'Z:\ lib \ auto \ IO \ IO.dll'を実行し、そこから作業します。 '@ INC'の内容も確認してください。リモートマシンからperlを実行している場合は、最初に 'net use'を実行する必要があります。 – Borodin

+0

お返事ありがとうございます。コードはローカルで実行されますが、問題を起こしたリモートマシンでコードを実行しようとしたときです。 Z:ドライブは、スクリプトを保持しているリモートドライブ上のフォルダであり、そこではperlが実行されます。私はcwdと@INCを出力するテストスクリプトを作った。 C:/ perl/perl/site/lib C:/ perl/perl/vendor/lib C:/ perl/perl/lib 。 Z:\ したがって、Z:\を見ることができます。私は単にC:/ Perl/libの内容をZ:/ libにコピーしてuse lib 'Z:\ lib'を使ってライブラリとして設定するだけで十分かどうかは分かりませんが、試してみるとうまくいかないようです。 乾杯。 –

+0

-f 'Z:\ lib \ auto \ IO \ IO.dll'なら 'OK'を印刷してOKを印刷しました。 –

答えて

2

私はそれを答えに上げます!リモートマシンでperlプロセスを実行している場合、Z:ドライブは必ずしも利用可能ではありません。あなたは(はい、あなたは2を作るために開始時に4バックスラッシュが必要なのです

use lib '\\\\COMPUTER\root\lib'; 

のように、最初にそこnet useを実行する、またはおそらく完全なUNCパスを使用してみてくださいする必要があります!しかし、単一引用符を使用するか、それが悪くなります。 )

+0

もう一度助けてくれてありがとう。私はperlスクリプトを実行するバッチファイルでnet useを設定します: 'net use Z:\\ folder'そして' setperl'を呼び出してから 'Z:'、 'perl foo.pl'などを実行します。スクリプトは特定のコンピュータではなくクラスタに展開されるため、パス全体を形成します。私は助けてくれてありがとう、申し訳ありません、私はここで少し密集していると証明しています。 –

+0

'net use'はそうではありません。 'Z:\\ COMPUTER \ folder'を' net use Z:\\ COMPUTER \ folder'にしたいとします。その後、 'Z:\ lib'は' \\ COMPUTER \ folder \ lib'に対応します。 'setperl'は何をしますか? – Borodin

関連する問題