我有一个Python 3应用程序,应该在某个时候将一个字符串放入剪贴板。我正在使用系统命令echo
和pbcopy
,它可以正常工作。但是,当字符串包含撇号(谁知道,也许是其他特殊字符)时,它会以错误退出。这是一个代码示例:
import os
my_text = "Peoples Land"
os.system("echo '%s' | pbcopy" % my_text)
一切正常。但是,如果您将字符串更正为“People's Land”,则会返回此错误:
sh: -c: line 0: unexpected EOF while looking for matching `''
sh: -c: line 1: syntax error: unexpected end of file
我想我需要以某种方式对字符串进行编码,然后再将其传递给shell命令,但我仍然不知道如何。实现这一目标的最佳方法是什么?
答案 0 :(得分:1)
这实际上与shell转义有关。
在命令行中尝试:
echo 'People's Land'
和这个
echo 'People'\''s Land'
在python中,这样的东西应该可以工作:
>>> import os
>>> my_text = "People'\\''s Land"
>>> os.system("echo '%s' > lol" % my_text)
答案 1 :(得分:1)
对于字符串中的撇号:
'%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))