在 Python3/OS X 中,如何将带撇号的字符串传递给终端命令?
In Python3/OS X, how to pass a string with apostrophe to a terminal command?
我有一个 Python 3 应用程序,它应该在某个时候将字符串放入剪贴板。我正在使用系统命令 echo
和 pbcopy
并且它工作正常。但是,当字符串包含撇号(谁知道呢,可能还有其他特殊字符)时,它会出错并退出。这是一个代码示例:
import os
my_text = "Peoples Land"
os.system("echo '%s' | pbcopy" % my_text)
它工作正常。但是如果你把字符串更正为"People's Land",它returns这个错误:
sh: -c: line 0: unexpected EOF while looking for matching `''
sh: -c: line 1: syntax error: unexpected end of file
我想我需要在将字符串传递给 shell 命令之前以某种方式对其进行编码,但我仍然不知道如何进行。实现此目标的最佳方法是什么?
这更多地与 shell 实际转义有关。
在命令行中试试这个:
echo 'People's Land'
还有这个
echo 'People'\''s Land'
在 python 中,像这样的东西应该可以工作:
>>> import os
>>> my_text = "People'\''s Land"
>>> os.system("echo '%s' > lol" % my_text)
对于字符串中的撇号:
- 您可以使用
'%r'
而不是 '%s'
my_text = "People's Land"
os.system("echo '%r' | pbcopy" % my_text)
要获取字符串的 shell 转义版本:
您可以使用shlex.quote()
import os, shlex
my_text = "People's Land, \"xyz\", hello"
os.system("echo %s | pbcopy" % shlex.quote(my_text))
我有一个 Python 3 应用程序,它应该在某个时候将字符串放入剪贴板。我正在使用系统命令 echo
和 pbcopy
并且它工作正常。但是,当字符串包含撇号(谁知道呢,可能还有其他特殊字符)时,它会出错并退出。这是一个代码示例:
import os
my_text = "Peoples Land"
os.system("echo '%s' | pbcopy" % my_text)
它工作正常。但是如果你把字符串更正为"People's Land",它returns这个错误:
sh: -c: line 0: unexpected EOF while looking for matching `''
sh: -c: line 1: syntax error: unexpected end of file
我想我需要在将字符串传递给 shell 命令之前以某种方式对其进行编码,但我仍然不知道如何进行。实现此目标的最佳方法是什么?
这更多地与 shell 实际转义有关。
在命令行中试试这个:
echo 'People's Land'
还有这个
echo 'People'\''s Land'
在 python 中,像这样的东西应该可以工作:
>>> import os
>>> my_text = "People'\''s Land"
>>> os.system("echo '%s' > lol" % my_text)
对于字符串中的撇号:
- 您可以使用
'%r'
而不是'%s'
my_text = "People's Land" os.system("echo '%r' | pbcopy" % my_text)
要获取字符串的 shell 转义版本:
您可以使用
shlex.quote()
import os, shlex my_text = "People's Land, \"xyz\", hello" os.system("echo %s | pbcopy" % shlex.quote(my_text))