首页 > 解决方案 > 当 arg 已经包含 " " 和 ' ' 引号时,如何将字符串 arg 提交给 subprocess.run(arg, shell=True)?

问题描述

我有以下命令需要使用 python 3.6 subprocess.run()函数发出:

gsettings set org.gnome.shell enabled-extensions "['apple@gmail.com', 'orange@yahoo.com']"

因为@符号是在该命令的列表元素中找到的,所以 run() 函数的shellkwarg 必须设置为 True,即subprocess.run(arg, shell=True). 因此,该函数的语法规则要求将上述命令作为字符串提交,即

arg = "gsettings set org.gnome.shell enabled-extensions "['apple@gmail.com', 'orange@yahoo.com']" "

这就是我的困境。整个命令的字符串引号“”与原始命令中的字符串引号“”冲突。我该如何克服这个问题?

标签: pythonstringsubprocess

解决方案


转义"'使用\: \", \'.

例子:

>>> v = "'\"\'"
>>> [ord(i) for i in v]
[39, 34, 39]

所以在你的情况下:

arg = "gsettings set org.gnome.shell enabled-extensions \"['apple@gmail.com', 'orange@yahoo.com']\" "

推荐阅读