2015-10-07 5 views
8

Ich führe ein Torch-Skript aus meiner Linux-Shell mit dem Befehl th aus. Diese Fackel Skript nimmt zwei Eingangsparameter:Fackel, wie ein Skript mit "Dofile" und Eingabeparameter ausführen?

th torch_script.lua input_parameter1 input_parameter2

Nun möchte Ich mag dieses Skript durch die Fackel Shell auszuführen. Um dies zu tun, muss ich den Befehl dofile verwenden. Aber in diesem Fall kann ich die Eingabeparameter input_parameter1 und input_parameter2 nicht übergeben.

In Torch, wie einige Eingabeparameter an den dofile Ausführungsbefehl übergeben?


EDIT: Hier ist der Code, den ich zu laufen bin versucht. Ich bin nicht in der Lage richtig zu laufen, vielleicht können Sie mir sagen, warum

external_command.lua Inhalt:

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

Auf der Schale:

$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 : Ich habe die Lösung von TonyHsu ausprobiert, aber es funktioniert sowieso nicht. Hier ist was ich mache.

I definieren eine Funktion runfile() in einem Skript runfile.lua genannt, das den folgenden Code enthält:

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

Dann verwende ich die external_command.lua Skript, das ich zuvor als scriptName Eingabeparameter definiert für diese Funktion:

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

Leider bekomme ich auch in diesem Fall einen Fehler:

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 
+1

Verwenden 'loadfile' statt' load' –

+0

Dank @EgorSkriptunoff, aber es funktioniert nicht das gleiche. Gleicher Fehler ... –

+0

Hey, kann da jemand helfen? –

Antwort

0

Sie verwenden loadfile:

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

Danke, aber es funktioniert nicht für mich. Der 'input_parameter1' wird durch einen' chromeSel = arg [1] 'Befehl übergeben, aber diese Zuweisung funktioniert nicht:' Fehler: Versuch, global 'chromeSel' (ein Nullwert) 'zu verketten. Warum? –

+0

Fügen Sie 'local arg = arg oder {...}' am Anfang von 'fackel_script.lua' hinzu – hjpotter92

+0

Danke. Ich habe diese Zeile zur # 1 Zeile der Datei hinzugefügt, aber es funktioniert nicht. Es erzeugt den gleichen Fehler –

0

Vielleicht können Sie versuchen, eine Funktion zuerst zu definieren:

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

dann

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

Danke TonyHsu, aber es funktioniert sowieso nicht. Ich habe meine Frage bearbeitet, um die Einzelheiten meines Tests zu melden. Kannst du es dir anschauen? –

1

Ich denke, laufen der Trick besteht darin, die Parameter zu übergeben in der globalen Variable 'args'. Sprich, ich habe folgenden Inhalt in 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 

Definieren Sie dann runfile() wie folgt.

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

Ich habe es in th getestet. Es sieht aus wie das.

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] 
Verwandte Themen