Windows上的Julia。如何将命令行选项传递给可执行文件

时间:2018-09-11 08:57:40

标签: julia

我希望通过Base.run (documented here)从Julia中调用一个可执行文件,并将命令行选项传递给该可执行文件,但是我不知道该怎么做。在我的特定示例中,可执行文件是Notepad++,而command line options

-alwaysOnTop -nosession

此示例代码有效,但未通过命令行选项:

function open_file_in_notepadpp()
    exepath =   "C:/Program Files (x86)/notepad++/notepad++.exe"   #Default location on 64 bit Windows
    command_line_options = "-alwaysOnTop -nosession "
    filetoopen = "c:/temp/foo.txt"
    Base.run(`$exepath $filetoopen`, wait = false)   
end

我尝试使用反引号,双引号等将command_line_options引入多种方法都无济于事,例如,下面的两行都不起作用:

Base.run(`$exepath $filetoopen`, `$command_line_options`,wait = false)
Base.run(`$exepath $command_line_options $filetoopen`,wait = false)

在Windows命令提示符下,以下命令可以正常工作:

"C:/Program Files (x86)/notepad++/notepad++.exe" -alwaysOnTop -nosession "c:/temp/foo.txt"

有人可以解释我所缺少的吗?

2 个答案:

答案 0 :(得分:2)

如果将包含空格的字符串替换为命令,它将被引用。因此,您的命令行参数将被加引号,您将得到

julia> `$exepath $filetoopen $command_line_options`
`'C:/Program Files (x86)/notepad++/notepad++.exe' c:/temp/foo.txt '-alwaysOnTop -nosession '`

我想您真正需要的是

julia> command_line_options = ["-alwaysOnTop", "-nosession"]
2-element Array{String,1}:
 "-alwaysOnTop"
 "-nosession"

julia> `$exepath $filetoopen $command_line_options`
`'C:/Program Files (x86)/notepad++/notepad++.exe' c:/temp/foo.txt -alwaysOnTop -nosession`

使用run运行后者应该可以。不幸的是,我无法在我的机器上对其进行测试。

答案 1 :(得分:0)

crstnbr的答案是正确的,但是他无法在自己的机器上进行测试。这是更正的代码:

function open_file_in_notepadpp()
    exepath =   "C:/Program Files (x86)/notepad++/notepad++.exe"   #Location if one follows the defaults in the notepad++ installer on 64 bit Wndows
    command_line_options = ["-alwaysOnTop", "-nosession"]          #Use an array to prevent the options being quoted 
    filetoopen = "c:/temp/foo.txt"

    Base.run(`$exepath $filetoopen $command_line_options`,wait = false)

end