2016-06-15 7 views
0

私はplinkコマンドを実行して、文字列に値または応答を返すLinuxプラットフォームでperlスクリプトを呼び出そうとしています。VBAからの戻り値call shell(whatever_cmd)

私が試した:OK OKまたはNOT

のいずれかで値を返すtest.plというしかし、私はRETVAL変数にこれらの文字列をキャプチャすることができませんでした

retval = Shell("plink perl test.pl") 

を。 retvalを追跡すると、ランダムな整数のように見えます。

正しい戻り値または文字列を取得する方法はありますか?

+2

ランダムな整数は0〜255ですか? 'Shell'コマンドがプログラムの終了コードではなく_output_を返すことを確かめますか? – simbabque

+0

最初はこれがLinuxだと思っていましたが、実際はWindowsのVBAに関する質問ですね。対象のコンピュータだけがLinuxだと思われますが、VBAからShell呼び出しを行う方法とはまったく関係ありません。あなたのシェル呼び出しからの出力(PIDや応答値ではない)をどのように取得するかの問題のほかに、私はあなたが 'plink'を正しく使っているとは思いません。たぶんあなたはそれを落としましたが、 'user @ host'とおそらくパスワードを指定する必要があると思います。 – jimtut

+0

... dos puttyコマンドを次のように使用しました。 Perl_Cmd = "perl"& "/usr/script/a.pl" Shell_Cmd = "plink root @"& "123.123.123.123"& "-pwルート "&Perl_Cmd RetVal =シェル(Shell_Cmd) 戻り値は255より大きいか、むしろ4〜5桁の数字にすることができます。 しかし、Linuxベースでa.plを実行すると、戻り値はOKかNOT OKになります。 私はa.pl(perlスクリプト)がうまくいきますが、VBAに価値を戻していないことを知っています。 –

答えて

0

Shell's return valueは、プログラムのプロセスIDです。プログラムの実際の出力を得るには(プロンプトから表示されるように)create a wscript objectとし、.execメソッドを呼び出します。

Set objShell = WScript.CreateObject("WScript.Shell") 
Set objExecObject = objShell.Exec("plink perl test.pl") 

Do While objExecObject.Status = WshRunning 
    DoEvents 
    'Could add a counter here to exit if it takes too long 
Loop 

objExecObject.StdOut.ReadAll