tutorial neural shell lua torch

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]