shell - tutorial - torch neural
Torch, ¿cómo ejecutar un script con "dofile" y parámetros de entrada? (3)
Estoy ejecutando un script Torch desde mi shell Linux, con el comando th
. Este script Torch toma dos parámetros de entrada:
th torch_script.lua input_parameter1 input_parameter2
Ahora me gustaría ejecutar este script a través del shell Torch. Para hacer esto, tengo que usar el comando dofile
. Pero en este caso, no sé cómo pasar los parámetros de entrada input_parameter1
y input_parameter2
.
En Torch, ¿cómo pasar algunos parámetros de entrada al comando de ejecución de dofile
?
EDITAR : Aquí está el código que estoy tratando de ejecutar. No puedo ejecutarlo correctamente, tal vez me puedas decir por qué
Contenido de external_command.lua:
local arg = arg or {...}
input_parameter = arg[1]
print("input_parameter ".. input_parameter);
En el caparazón:
$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 : Probé la solución publicada por TonyHsu, pero de todos modos no funciona. Esto es lo que estoy haciendo.
runfile()
una función runfile()
en un script llamado runfile.lua
que contiene el siguiente código:
function runfile(scriptName, input)
opt = nil
arg = input
dofile(scriptName)
end
Luego utilizo el script external_command.lua
que scriptName
previamente como parámetro de entrada scriptName
para esta función:
th> scriptName = "external_command.lua"
th> require ''./runfile.lua''
th> runfile(scriptName, "Hello world");
Lamentablemente, también en este caso me sale un error:
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
:
local TempFunc = loadfile "torch_script.lua"
TempFunc(input_parameter1, input_parameter2)
Tal vez puedas intentar definir una función primero:
function runfile(<scriptName>, ...)
opt = nil
arg = {...}
dofile(<scriptName>)
end
entonces corre
runfile(<scriptName>,...)
Creo que el truco es pasar los parámetros en la variable global ''args''. Diga, tengo el siguiente contenido en 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
A continuación, defina runfile () de la siguiente manera.
function runfile(f, ...)
local tmp = args -- save the original global args
args = table.pack(...)
dofile(f)
args = tmp -- restore args
end
Lo he probado en th. Se parece a esto.
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]