1

我有一个 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 命令之前以某种方式对字符串进行编码,但我仍然不知道如何。实现这一目标的最佳方法是什么?

4

2 回答 2

1

这实际上与外壳转义有关。

在命令行中试试这个:

echo 'People's Land'

和这个

echo 'People'\''s Land'

在 python 中,这样的东西应该可以工作:

>>> import os
>>> my_text = "People'\\''s Land"
>>> os.system("echo '%s' > lol" % my_text)
于 2016-08-19T13:53:04.120 回答
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))
    
于 2016-08-19T15:23:31.723 回答