2015-10-07 14 views
8

LinuxシェルからthコマンドでTorchスクリプトを実行しています。Torch、 "dofile"と入力パラメータを使ってスクリプトを実行する方法は?

th torch_script.lua input_parameter1 input_parameter2

は、今私はトーチシェルを介してこのスクリプトを実行したいと思います:このトーチスクリプトは、2つの入力パラメータを取ります。これを行うには、dofileコマンドを使用する必要があります。しかし、この場合、入力パラメータinput_parameter1input_parameter2をどのように渡すかわかりません。

Torchでは、dofile実行コマンドに入力パラメータを渡す方法はありますか?


EDIT:ここで私が実行しようとしているコードです。私は多分あなたは私に言うことができ、それを適切に実行することはできないんだけど、なぜ

external_command.lua内容:

$th 
th> tempFunc = load "external_command.lua" 
th> tempFunc("try") 
[string "_RESULT={tempFunc("try")}"]:1: attempt to call global 'tempFunc' (a nil value) 
stack traceback: 
    [string "_RESULT={tempFunc("try")}"]:1: in main chunk 
    [C]: in function 'xpcall' 
    /home/davide/torch/install/share/lua/5.1/trepl/init.lua:630: in function 'repl' 
    ...vide/torch/install/lib/luarocks/rocks/trepl/scm-1/bin/th:185: in main chunk 
    [C]: at 0x004064d0 

EDIT 2:シェルで

local arg = arg or {...} 
input_parameter = arg[1] 
print("input_parameter ".. input_parameter); 

:私はTonyHsuによって投稿されたソリューションを試しましたが、とにかく動作しません。 ここに私がやっていることがあります。

私は次のコードを含むrunfile.lua呼ばれるスクリプト内の関数runfile()を定義:

function runfile(scriptName, input) 
    opt = nil 
    arg = input 
    dofile(scriptName) 
end 

そして私は以前にこの関数のscriptName入力パラメータとして定義external_command.luaスクリプト使用:

th> scriptName = "external_command.lua" 
th> require './runfile.lua' 
th> runfile(scriptName, "Hello world"); 

残念ながら、この場合もエラーが表示されます。

external_command.lua:4: attempt to concatenate global 'input_parameter' (a nil value) 
stack traceback: 
    external_command.lua:4: in main chunk 
    [C]: in function 'dofile' 
    /home/davide/torch/temp/runfile.lua:4: in function 'runfile' 
    [string "runfile(scriptName, "Hello world");"]:1: in main chunk 
    [C]: in function 'xpcall' 
    /home/davide/torch/install/share/lua/5.1/trepl/init.lua:648: in function 'repl' 
    ...vide/torch/install/lib/luarocks/rocks/trepl/scm-1/bin/th:185: in main chunk 
[C]: at 0x004064d0 
あなたは loadfileを使用
+1

代わりに 'load'の' loadfile' –

+0

感謝を使用し@EgorSkriptunoffが、それは同じように動作しません。同じエラー... –

+0

誰かが助けることができますか? –

答えて

0

local TempFunc = loadfile "torch_script.lua" 
TempFunc(input_parameter1, input_parameter2) 
+0

ありがとうが、それは私にはうまくいかない。 'input_parameter1'は' chromSel = arg [1] 'コマンドに渡されますが、この割り当ては機能しません:'エラー:グローバル 'chromSel'(nil値)を連結しようとします。どうして? –

+0

'torch_script.lua'の先頭に' local arg = arg or {...} 'を追加してください – hjpotter92

+0

ありがとうございました。その行をファイルの#1行に追加しましたが、動作しません。それは同じエラーを生成する –

0

たぶん、あなたは最初の関数を定義しようとすることができます:

function runfile(<scriptName>, ...) 
opt = nil 
arg = {...} 
dofile(<scriptName>) 
end 

その後、

runfile(<scriptName>,...) 
+0

ありがとうTonyHsuしかし、とにかく動作しません。テストの詳細を報告するために私の質問を編集しました。あなたはそれを見てみることができますか? –

1

を実行して、私はトリックがパラメータを渡すことだと思いますグローバル変数 'args'に入れます。言って、external_command.luaに次のコンテンツがあります。

-- args has been set by the caller 
if not args or #args == 0 then 
    print('no input_parameter') 
else 
    print('#args = ' .. #args, 'input_parameter: ' .. args[1]) 
end 

次に、runfile()を次のように定義します。

function runfile(f, ...) 
    local tmp = args -- save the original global args 
    args = table.pack(...) 
    dofile(f) 
    args = tmp -- restore args 
end 

私はこれをthでテストしました。それはこのように見えます。

th> runfile('ext_command.lua', 10) 
#args = 1  input_parameter: 10 
                     [0.0002s] 
th> runfile('ext_command.lua', 'a', 'b', 'c') 
#args = 3  input_parameter: a 
                     [0.0002s] 
関連する問題