Julia 朱莉娅:如何从朱莉娅代码执行系统命令?

Julia 朱莉娅:如何从朱莉娅代码执行系统命令?,julia,Julia,我已经创建了一个字符串 x = "ls" 我想把Julia的x作为字符串执行。我该怎么做 ls只是一个虚构的例子,我实际上想执行一个更复杂的命令,所以请不要告诉我pwd()有效 实际的命令可能是split c:/data/Performance\u All/Performance\u 2000Q1.txt-nl/3-d/c/data/Performance\u All\u split/Performance\u 2000Q1.txt您可以简单地使用Cmd对象来运行。您可以使用字符串通过`和插值

我已经创建了一个字符串

x = "ls"
我想把Julia的
x
作为字符串执行。我该怎么做

ls
只是一个虚构的例子,我实际上想执行一个更复杂的命令,所以请不要告诉我
pwd()
有效


实际的命令可能是
split c:/data/Performance\u All/Performance\u 2000Q1.txt-nl/3-d/c/data/Performance\u All\u split/Performance\u 2000Q1.txt
您可以简单地使用
Cmd
对象来运行
。您可以使用字符串通过
`
和插值运算符
$
或通过
Cmd
构造函数创建
Cmd
对象

这里有一个例子。不过,您可能需要检查文件路径

x = "split"
path1 = "c:/data/Performance_All/Performance_2000Q1.txt"
option1 = "-n l/3"
option2 = "-d"
path2 = "/c/data/Performance_All_split/Performance_2000Q1.txt"
run(`$x $path1 $option1 $option2 $path2`) # remember the backticks ``
即使文件路径中有空格,也不需要使用引号。command对象运行程序并将参数直接传递给它,而不是通过shell

您可能需要阅读相关的手册条目。
Base::read
可用于运行命令并读取其结果

您可以在中找到运行命令的用法示例

重要的是将命令及其参数包装为反勾号。e、 g


我不确定我是否理解你的问题,但威尔
x=@cmd“ls”;运行(x)
执行您想要的操作?我收到IOError:无法spanw`split-n l/3-d。。。。。不是这样的文件或目录错误。有什么想法吗?正如我在回答中所说的,您可能希望检查文件路径(它们似乎是错误的),并确保命令
split
位于您的
路径中。否则,将其添加到您的
路径中,确保其可执行等。实际上,``要求您将组件放入逻辑组中,例如
m=split abc.txt def.txt;运行(
m
将在
m=“abc.txt”时失败;out=“def.txt”;运行(`split$m$out`)
将起作用。这同样适用于像
-d
-n3/l
这样的选项,您需要执行
选项1=“-nl/3”;选项2=“-d”;运行(`x$path1$option1$option2$path2`)
;如果你改变它,我会告诉你一个可怕的错误。你是对的!两个选项都会在一个选项中自动引用,从而导致问题。始终可以打印命令对象以检查错误。
out = ""
try
    global out
    out = read(`$x`, String)
catch ex
    @error ex
end