我希望通过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"
有人可以解释我所缺少的吗?
答案 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