我正在使用th
命令从我的Linux shell执行Torch脚本。这个Torch脚本有两个输入参数:
th torch_script.lua input_parameter1 input_parameter2
现在我想通过Torch shell运行这个脚本。为此,我必须使用dofile
命令。但在这种情况下,我不知道如何传递输入参数input_parameter1
和input_parameter2
。
在Torch中,如何将一些输入参数传递给dofile
执行命令?
编辑:这是我正在尝试运行的代码。我无法正常运行,也许你可以告诉我为什么
external_command.lua内容:
local arg = arg or {...}
input_parameter = arg[1]
print("input_parameter ".. input_parameter);
在shell上:
$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
编辑2 :我尝试过TonyHsu发布的解决方案,但无论如何它都无效。 这就是我正在做的事情。
我在名为runfile()
的脚本中定义了一个函数runfile.lua
,其中包含以下代码:
function runfile(scriptName, input)
opt = nil
arg = input
dofile(scriptName)
end
然后我使用我之前为此函数定义为external_command.lua
输入参数的scriptName
脚本:
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
答案 0 :(得分: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> 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]
答案 1 :(得分:0)
您使用loadfile
:
local TempFunc = loadfile "torch_script.lua"
TempFunc(input_parameter1, input_parameter2)
答案 2 :(得分:0)
也许你可以先尝试定义一个函数:
function runfile(<scriptName>, ...)
opt = nil
arg = {...}
dofile(<scriptName>)
end
然后运行
runfile(<scriptName>,...)