【发布时间】:2013-12-24 17:02:18
【问题描述】:
我正在尝试使用子进程模块运行以下命令:
/usr/local/MATLAB/R2013b/bin/matlab -r "func_call('output', '/path/to/location/')"
请注意,Matlab 要求函数调用使用双引号。上面的命令可以从 bash 命令行中找到。这是我在python中所做的
func = "func_call('output', '/path/to/loc/')"
cmd = "/usr/local/MATLAB/R2013b/bin/matlab "
options = "-r \"%s\"" % func
run_cmd = cmd + options
proc = subprocess.Popen(run_cmd.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
proc.communicate()
我收到以下错误:
('', '/usr/local/MATLAB/R2013b/bin/matlab: eval: line 1738: syntax error near unexpected token `)\'\n/usr/local/MATLAB/R2013b/bin/matlab: eval: line 1738: `exec "/usr/local/MATLAB/R2013b/bin/gla64/MATLAB" -r ""\'"func_call(\'"\'output\'," \'/path/to/loc/\')"\'\n/usr/local/MATLAB/R2013b/bin/matlab: line 1738: warning: syntax errors in . or eval will cause future versions of the shell to abort as Posix requires\n')
我假设是引号弄乱了执行。我对吗?我该如何解决这个问题?
【问题讨论】:
-
你试过
import shlex; shlex.split(run_cmd)而不是普通的str.split()吗?但是,从一开始就将命令行创建为列表更容易。通过这种方式,您可以完全控制拆分。
标签: python subprocess