Julia:无法通过字符串变量运行带参数的命令

Julia:无法通过字符串变量运行带参数的命令,julia,Julia,我正在尝试使用run()或success()来执行Julia的Python脚本 如果手动指定命令,我可以很好地运行它: julia> run(`python sample.py`) woo! sample 然而,如果我试图通过一个字符串参数来运行它,它会突然不起作用 julia> str = "python sample.py" "python sample.py" julia> run( `$str` ) ERROR: could not spawn `'python s

我正在尝试使用run()或success()来执行Julia的Python脚本

如果手动指定命令,我可以很好地运行它:

julia> run(`python sample.py`)
woo! sample
然而,如果我试图通过一个字符串参数来运行它,它会突然不起作用

julia> str = "python sample.py"
"python sample.py"

julia> run( `$str` )
ERROR: could not spawn `'python sample.py'`: no such file or directory (ENOENT)
 in _jl_spawn at process.jl:217
 in spawn at process.jl:348
 in spawn at process.jl:389
 in run at process.jl:478
指定sample.py的完整路径会产生相同的结果。 奇怪的是,仅仅将python作为字符串运行就可以了:

julia> str = "python"
"python"

julia> run( `$str` )
Python 2.7.3 (default, Feb 27 2014, 19:58:35) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 
我做错什么了吗

谢谢

这是由于。它将每个插值零件视为命令的独立部分。虽然有时有点不直观,但它允许您完全忘记引用、空白等所有困难

当运行(`code>str`)时,它将
str
视为整个命令名,这就是为什么它抱怨找不到名为
“python sample.py”
的可执行文件的原因。如果希望使用参数“sample.py”运行“python”,则需要两个插值:

cmd = "python"
arg = "sample.py"
run(`$cmd $arg`)
这允许您的参数有一个空格,它仍然会被视为第一个参数

如果您真的想使用像
“python sample.py”
这样的字符串,可以将其拆分为空白:

str = "python sample.py"
run(`$(split(str))`) # strongly unadvised

但是请注意,这对于参数名称来说是非常脆弱的。如果您想要运行一个名为“My Documents/sample.py”的文件,这将中断,而第一次插值将正常工作。

可能并不奇怪,在使用Python时会出现完全并行的问题(因此
subprocess.call([“Python”,“sample.py”])
)。