python 子过程原因 bash 脚本 - 您需要打印报价

我对子过程和打印引文有问题。

我的脚本 Python 接受用户输入,有点恶化它 - 我需要他将他的结果发送给脚本 bash 因此。


myscript.sh 'var1 == a var2 == b; othervar == c' /path/to/other/files


我将赢的地方,它是单引号。 Python 试图抢夺他们。

我用它来进行测试。


subprocess.Popen/[myscript.sh 'var=11; ignore all' /path/to/files], shell=True, executable="/bin/bash"/


返回指向2单引号的不可接受的语法。 我还尝试了上面没有括号,并在外面使用单引号和双引号等等。

另一个想要。

正如我上面所说的那样, 'var == a var == b; othervar == c' 来自脚本 python /以字符串格式/ - 我需要如下称之为子过程。


subprocess.Popen/[myscript.sh myvariables /path/to/files], shell=True, executable="/bin/bash"/


我只需要把单引号放在价值周围 myvariables, 如在第一个例子中。

有没有关于我从正确的方法下降的说明?

谢。
已邀请:

三叔

赞同来自:

什么时候 shell=True 由B传播。 Popen, 您通过任何要在命令提示符中发送的内容。 这意味着在您的列表中必须只有一个元素。 例如:


subprocess.Popen/['myscript.sh "var=11; ignore all" /path/to/files'], shell=True, executable="/bin/bash"/


或者如果 /path/to/files 是您的环境中的变量 Python:


subprocess.Popen/['myscript.sh "var=11; ignore all" %s' % path_to_files], shell=True, executable="/bin/bash"/


说过,我

最终

我建议您不要使用参数 shell. 原因是脆弱性。 您将获得更可靠的方式来这样做:


subprocess.Popen/["/bin/bash", "myscript.sh", "var=11; ignore all", path_to_files]/


注意 "var=11; ignore all" 作为脚本发送为一个参数。 如果这些是单独的参数,请使它们单独的列表元素。

石油百科

赞同来自:

我没有检查为什么它有效,但它是如此,没有必要 shell=True.


subprocess.Popen/["/bin/bash", "myscript.sh", '""' + string_to_be_quoted + '""', path_to_files]/

冰洋

赞同来自:

这是一个列表,它有线,所以他们需要引号:


["myscript.sh", "var=11; ignore all", "/path/to/files"]


这应该是工作。 如果您的脚本真的以某种方式依赖于引号,请尝试此操作 /我不知道子过程如何运作的详细信息/:


["myscript.sh", "'var=11; ignore all'", "/path/to/files"]

要回复问题请先登录注册