2015-10-07 16 views
8

Sto eseguendo uno script Torch dalla mia shell Linux, con il comando th. Questo script torcia richiede due parametri di input:Torcia, come eseguire uno script con "dofile" e parametri di input?

th torch_script.lua input_parameter1 input_parameter2

ora mi piacerebbe per eseguire questo script attraverso il guscio della torcia. Per fare questo, devo usare il comando dofile. Ma in questo caso, non so come passare i parametri di input input_parameter1 e input_parameter2.

In Torch, come passare alcuni parametri di input al comando di esecuzione dofile?


EDIT: Ecco il codice che sto cercando di eseguire. Io non sono in grado di funzionare in modo corretto, forse mi può dire il motivo per cui il contenuto

external_command.lua:

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

Sul guscio:

$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 : Ho provato la soluzione pubblicata da TonyHsu, ma non funziona comunque. Ecco cosa sto facendo.

definisco una funzione runfile() in uno script chiamato runfile.lua che contiene il codice seguente:

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

Poi utilizzare lo script external_command.lua che precedentemente definito come parametro di input scriptName per questa funzione:

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

Sfortunatamente, anche in questo caso viene visualizzato un messaggio di errore:

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

Usa 'loadfile' invece di' load' –

+0

Grazie @EgorSkriptunoff ma non funziona lo stesso. Stesso errore ... –

+0

Ehi c'è qualcuno in grado di aiutare? –

risposta

0

si utilizza loadfile:

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

Grazie ma non funziona per me. Il 'input_parameter1' viene passato attraverso un comando' chromSel = arg [1] ', ma questo compito non funziona:' Errore: tentare di concatenare 'chromSel' globale (un valore nullo) '. Perché? –

+0

Aggiungi 'local arg = arg o {...}' all'inizio di 'torch_script.lua' – hjpotter92

+0

Grazie. Ho aggiunto questa linea alla riga n. 1 del file, ma non funziona. Genera lo stesso errore –

0

Forse si può provare a definire una funzione prima:

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

quindi eseguire

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

Grazie TonyHsu ma non funziona comunque. Ho modificato la mia domanda per riportare i dettagli del mio test; puoi dare un'occhiata ad esso? –

1

Credo che il trucco è quello di passare i parametri nella variabile globale 'args'. Di ', ho il seguente contenuto 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 

Quindi definire runfile() come segue.

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

L'ho provato in th. Sembra così

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]