Вы случайно не знаете, как найти путь сценария julia в сценарии julia?
По сути, я создал скрипт julia с именем someCode.jl
, и он находится в папке с именем repository
.
Когда я запускаю someCode.jl
, я хотел бы создать выходную папку с именем output
в папке repository
и поместить файл a.txt
в папку output
.
С абсолютным путем он работает нормально, но я хочу, чтобы он работал для людей, которые поставили его по другому пути, но я пока не смог найти правильный синтаксис.
Попытка
Команда pwd()
возвращает каталог, в котором установлена julia, в данном случае это: "E:\\Users\\a\\AppData\\Local\\Julia-1.1.0"
Следовательно, я должен либо убедиться, что текущий путь обновляется в папку, в которой находится скрипт, когда я его запускаю или получить местоположение самого скрипта в коде скрипта. Ни один из подходов еще не был успешным в Юлии. REPL.
MWE:
Это пример файла someCode.jl
, я запускаю его, открыв Julia REPL и введя: include("E:/someCode.jl")
open("c:/repository/output/a.txt", "w") do f
n1 = "Content of first line"
write(f, "$n1")
end
Если хранилище или выходная папка еще не существуют, выдается ошибка:
ERROR: LoadError: SystemError: opening file "c:/repository/output/a.txt": No such file or directory
Stacktrace:
[1] #systemerror#43(::Nothing, ::Function, ::String, ::Bool) at .\error.jl:134
[2] systemerror at .\error.jl:134 [inlined]
[3] #open#309(::Nothing, ::Nothing, ::Nothing, ::Bool, ::Nothing, ::Function, ::String) at .\iostream.jl:283
[4] #open at .\none:0 [inlined]
[5] open(::String, ::String) at .\iostream.jl:339
[6] #open#310(::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::Function, ::getfield(Main, Symbol("##7#8")), ::String, ::Vararg{String,N} where N) at .\iostream.jl:367
[7] open(::Function, ::String, ::String) at .\iostream.jl:367
[8] top-level scope at none:0
[9] include at .\boot.jl:326 [inlined]
[10] include_relative(::Module, ::String) at .\loading.jl:1038
[11] include(::Module, ::String) at .\sysimg.jl:29
[12] include(::String) at .\client.jl:403
[13] top-level scope at none:0
in expression starting at E:\someCode.jl:1
Итак, я убедился, что папки c:/repository/output
существуют, поместил второй скрипт в файл с именем 'someLocalCode.jl and ran it with
include ("C: /repository/someLocalCode.jl") `:
open("c:/repository/output/a.txt", "w") do f
n1 = "Content of first line"
write(f, "$n1")
end
open("output/b.txt", "w") do f
n1 = "Content of first line"
write(f, "$n1")
end
open("/output/b.txt", "w") do f
n1 = "Content of first line"
write(f, "$n1")
end
#include("C:/repository/test.jl")
Оба output/b.txt
и /output/b.txt
дают (в сущности) одну и ту же сущность при индивидуальном тестировании:
ERROR: LoadError: SystemError: opening file "/output/b.txt": No such file or directory
Stacktrace:
[1] #systemerror#43(::Nothing, ::Function, ::String, ::Bool) at .\error.jl:134
[2] systemerror at .\error.jl:134 [inlined]
[3] #open#309(::Nothing, ::Nothing, ::Nothing, ::Bool, ::Nothing, ::Function, ::String) at .\iostream.jl:283
[4] #open at .\none:0 [inlined]
[5] open(::String, ::String) at .\iostream.jl:339
[6] #open#310(::Base.Iterators.Pairs{Union{},Union{},Tuple{},NamedTuple{(),Tuple{}}}, ::Function, ::getfield(Main, Symbol("##15#16")), ::String, ::Vararg{String,N} where N) at .\iostream.jl:367
[7] open(::Function, ::String, ::String) at .\iostream.jl:367
[8] top-level scope at none:0
[9] include at .\boot.jl:326 [inlined]
[10] include_relative(::Module, ::String) at .\loading.jl:1038
[11] include(::Module, ::String) at .\sysimg.jl:29
[12] include(::String) at .\client.jl:403
[13] top-level scope at none:0
in expression starting at C:\repository\someLocalCode.jl:6
Принимая во внимание, что абсолютный путь работает.