gpt4 book ai didi

python - 带引号参数的子进程调用

转载 作者:行者123 更新时间:2023-12-01 05:28:54 25 4
gpt4 key购买 nike

我正在尝试使用子进程模块运行以下命令:

/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')

我假设是引号扰乱了执行。我对吗?我该如何解决这个问题?

最佳答案

我怀疑这是因为您的分割,它分割了所有空格,包括引号之间的空格。试试这个:

func = "func_call('output', '/path/to/loc/')"
cmd = "/usr/local/MATLAB/R2013b/bin/matlab"
run_cmd = [cmd, "-r", func]
proc = subprocess.Popen(run_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
proc.communicate()

请注意,我没有在 func 周围添加另一组引号。 shell(即 bash)中的那些引号告诉 shell,它们之间的所有内容都是单个参数,这些引号由 shell 解析,而不是实际参数的一部分。在 python 中,第一个命令之后的每个字符串都是一个参数,因此您不需要执行任何特殊操作。

关于python - 带引号参数的子进程调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20764363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com