2015-10-07 11 views
8

Tôi đang thực thi kịch bản lệnh Torch từ trình bao Linux của mình, với lệnh th. kịch bản Torch này có hai tham số đầu vào:Ngọn đuốc, cách thực thi tập lệnh với "dofile" và thông số đầu vào?

th torch_script.lua input_parameter1 input_parameter2

Bây giờ tôi muốn chạy script này thông qua vỏ Torch. Để làm điều này, tôi phải sử dụng lệnh dofile. Nhưng trong trường hợp này, tôi không biết cách chuyển các tham số đầu vào input_parameter1input_parameter2.

Trong Torch, cách chuyển một số thông số đầu vào vào lệnh thực thi dofile?


EDIT: Đây là mã mà tôi đang cố gắng chạy. Tôi không thể chạy nó đúng cách, có thể bạn có thể cho tôi biết tại sao nội dung

external_command.lua:

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

Trên vỏ:

$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 : Tôi đã thử các giải pháp được đăng bởi TonyHsu, nhưng nó không hoạt động anyway. Đây là những gì tôi đang làm.

tôi định nghĩa một hàm runfile() trong một kịch bản gọi là runfile.lua chứa đoạn mã sau:

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

Sau đó, tôi sử dụng external_command.lua kịch bản mà trước đây tôi định nghĩa là tham số đầu vào scriptName cho chức năng này:

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

Thật không may, trong trường hợp này tôi gặp lỗi:

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

Sử dụng 'loadfile' thay vì' tải' –

+0

Cảm ơn @EgorSkriptunoff nhưng không hoạt động như cũ. Cùng một lỗi ... –

+0

Hey có ai có thể giúp đỡ? –

Trả lời

0

Bạn sử dụng loadfile:

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

Cảm ơn nhưng nó không hoạt động với tôi. 'Input_parameter1' được truyền qua lệnh' chromSel = arg [1] ', nhưng phép gán này không hoạt động:' Lỗi: cố gắng ghép nối 'chromSel' toàn cục '(giá trị nil) '. Tại sao? –

+0

Thêm 'local arg = arg hoặc {...}' vào đầu 'torch_script.lua' – hjpotter92

+0

Cảm ơn. Tôi đã thêm dòng đó vào dòng # 1 của tệp, nhưng nó không hoạt động. Nó tạo ra cùng một lỗi –

0

Có lẽ bạn có thể thử để xác định một hàm đầu tiên:

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

sau đó chạy

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

Cảm ơn TonyHsu nhưng nó không hoạt động anyway. Tôi đã chỉnh sửa câu hỏi của mình để báo cáo chi tiết về bài kiểm tra của mình; bạn có thể xem nó không? –

1

Tôi nghĩ rằng Bí quyết là để vượt qua các thông số trong biến toàn cục 'args'. Giả sử, tôi có nội dung sau đây trong 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 

Sau đó xác định runfile() như sau.

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

Tôi đã thử nghiệm nó trong th. Nó trông như thế này

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] 
Các vấn đề liên quan