Как вводить строки в Julia из командной строки

#compilation #julia

Вопрос:

Я создаю приложение для отправки с Джулией, используя библиотеку PackageCompiler.jl.

https://github.com/JuliaLang/PackageCompiler.jl

Я последовал приведенному здесь примеру и заставил его работать так, как ожидалось:

https://github.com/JuliaLang/PackageCompiler.jl

Сейчас я пытаюсь по частям модифицировать код, чтобы заменить игрушечную функцию моей собственной функцией. Это включает в себя чтение CSV-файла во фрейм данных, путь к которому берется из командной строки. На данный момент я просто пытаюсь выполнить эту задачу.

У меня есть этот код в MyApp.jl :

 module MyApp

using Example
using HelloWorldC_jll
using Pkg.Artifacts
using DataFrames, CSV, Statistics  

fooifier_path() = joinpath(artifact"fooifier", "bin", "fooifier" * (Sys.iswindows() ? ".exe" : ""))

function julia_main()
    try
        real_main()
    catch
        Base.invokelatest(Base.display_error, Base.catch_stack())
        return 1
    end
    return 0
end

function real_main()
    # @show ARGS
    # @show Base.PROGRAM_FILE
    # @show DEPOT_PATH
    # @show LOAD_PATH
    # @show pwd()
    # @show Base.active_project()
    # @show Threads.nthreads()
    # @show Sys.BINDIR
    # display(Base.loaded_modules)
    for arg in ARGS
        println(arg)
    end
    println("this part worked!")


    df = CSV.read(string(ARGS[1]), DataFrame)[10:end-10,:];
    println(df)
    return
end

if abspath(PROGRAM_FILE) == @__FILE__
    real_main()
end
 

Я компилирую код с помощью:

 using PackageCompiler;
create_app("MyApp", "MyAppCompiled")
 

и он отлично компилируется.

Я запускаю его с:

 julia MyAppCompiled/bin/MyApp <absolute path to csv>
 

и это работает вплоть до части фрейма данных, где я получаю эту ошибку:

 it worked!
MyApp(66457,0x115997dc0) malloc: *** error for object 0x1117d9510: pointer being realloc'd was not allocated
MyApp(66457,0x115997dc0) malloc: *** set a breakpoint in malloc_error_break to debug

signal (6): Abort trap: 6
in expression starting at none:0
__pthread_kill at /usr/lib/system/libsystem_kernel.dylib (unknown line)
Allocations: 47484171 (Pool: 47468051; Big: 16120); GC: 49
Abort trap: 6
 

Кто-нибудь может помочь мне понять, что я делаю не так? Я знаю, что указываю правильный путь, потому что, если я неправильно введу путь, я получу сообщение » это неправильный файл…». Я пробовал звонить по относительному и абсолютному путям.

Комментарии:

1. Чтобы помочь с отладкой процесса, вы можете попробовать (а) пытается что-то проще и легче, чем CSV.read на DataFrame … скажем просто readdlm (от DelimitedFiles stdlib) К Array , и (B), возможно, не нарезая ДФ прямо после ее прочтения (например, в случае, если он пуст, и т. д.).