2017-09-13 33 views
0

私は現在、ランドサットのシーンのいくつかのバッチのダウンロードは空間座標に基づいて設定するためにUSGSのEarthExplorerで働いています。彼らはhttps://earthexplorer.usgs.gov/inventory/example/json-download_data-plでこれを行う素晴らしい手軽なスクリプトを提供します。これはすばらしいです。私は、クラスタ上で働いている、と私は、私は次の出力を取得するスクリプトを実行すると、正常にすべてのPerlモジュールをインストールするにもかかわらず:不正な形式のJSON文字列Perlを使用してearthexplorer

Running Script... 


Error: Error: malformed JSON string, neither array, object, number, string or 
atom, at character offset 0 (before "LWP will support htt...") at ./dl.pl line 182 

これは好奇心が強いようです。説明の方法として、スクリプトが

#!/usr/bin/perl 

#use strict; 
use warnings; 
use 5.010; 
use JSON; 
use Scalar::Util qw(looks_like_number reftype dualvar); 
use LWP::UserAgent; 
use Getopt::Long qw(GetOptions); 

my ($username, $password); 
$username = "myusername_filled_in"; 
$password = "mypassword_filled_in"; 

GetOptions(
    'username=s' => \$username, 
    'password=s' => \$password, 
) or die "Error retrieving Username and Password\n"; 

で始まり、コードの問題のビットは、私は次のことを行っているCan't run Perl script on other computerにおいて非常に有用なアドバイスに続いて

$res = $response->{_content}; 
    $res = decode_json $res; 

です:

  1. 問題のコード領域で$response->contentから$response->decoded_content(charset => 'none')に変更されました。エラーなし -

  2. だけで、完全なWebページを引き戻さlwp-request https://google.com/蘭。そう、それは働いているようです。

  3. はその後

LWP will support https URLs if the LWP::Protocol::https module is installed.

そして、確かに、LWP ::議定:: HTTPSがインストールされているエラーを投げたprint $response->decoded_content(charset => 'none');を挿入して、いくつかのデバッグを参照しようとしました。

ユーザー名とパスワードを定義したようなもの(変数が宣言された後はちょうど$username = "myusername";など)または別のものがasinineなのではないかと思います。

は、誰がこのに実行していますか?


以下のクエリからの出力を追加するには:あなたのコードはエラーをチェックしません

$ which cpan ; head -n 1 `which cpan` ; echo 'o conf' | cpan | grep -P 'make|mbuild' ; set | grep ^PERL ; which perl ; perl -le'use LWP::Protocol::https; print "ok";' 

/share/pkg/perl/5.10.1/bin/cpan 
#!/share/pkg/perl/5.10.1/bin/perl 
    make    [/usr/bin/make] 
    make_arg   [] 
    make_install_arg [] 
    make_install_make_command [/usr/bin/make] 
    makepl_arg   [] 
    mbuild_arg   [] 
    mbuild_install_arg [] 
    mbuild_install_build_command [./Build] 
    mbuildpl_arg  [] 
PERL5LIB=/home/jb92b/perl5/lib/perl5:/home/jb92b/perl5/lib/perl5:/home/jb92b/perl5/lib/perl5 
PERL_LOCAL_LIB_ROOT=/home/jb92b/perl5:/home/jb92b/perl5:/home/jb92b/perl5 
PERL_MB_OPT='--install_base "/home/jb92b/perl5"' 
PERL_MM_OPT=INSTALL_BASE=/home/jb92b/perl5 
/share/pkg/perl/5.10.1/bin/perl 
ok 
+0

を使用する必要がありますすることができこのPerlスクリプトの最初の部分を質問に追加しますか? – raina77ow

+0

要求に応じて編集https://earthexplorer.usgs.gov/inventory/example/json-download_data-pl – jebyrnes

+1

LWPの主張には、 :Protocol :: httpsがインストールされています – ikegami

答えて

1

LWP :: Protocol :: httpsがインストールされていないという問題があります。

あなたはそうだと主張していますが、Perlはここでは正式です:) Perlでインストールされていないため、Perlにはそれを探すための標準のディレクトリがインストールされていないか、許可の問題があります。

この場合、スクリプトは/usr/bin/perlを使用しますが、/を使用して/share/pkg/perl/5.10.1/bin/perlにモジュールをインストールしました。あなたのスクリプトが使用するperlを切り替える必要があります。または、/usr/bin/perlの/を使用してモジュールをインストールする必要があります。

+0

'2017年9月13日水曜日にデータベースが生成されました15:29:02 GMT LWP :: Protocol :: httpsが最新(6.07)です。 ' – jebyrnes

+0

あなたはデバッグコードを持っています:'エラー:X:501プロトコルスキームを取得できません 'https'はサポートされていません(LWP :: Protocol :: httpsがインストールされていません) – jebyrnes

+0

だから?私が言ったように:それはPerlによってインストールされていませんでした。Perlにそれを探すためにPerlに知らせることなく非標準のディレクトリをインストールしたか、許可の問題があります。 – ikegami

0

「私は自分のユーザー名とパスワードを定義したかのようなもの(ただ$username = "myusername";など、。変数が宣言された後)」

あなたのユーザ名とパスワードを追加するコードを変更してはなりません。それが書かれている方法は、GetOptionsへの呼び出しは、それらを上書きしますあなたは

program.pl --usernam myusername --password mypassword 
関連する問題