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

文字列をシェルコマンドに渡す前に何らかの方法でエンコードする必要があると思いますが、まだ方法がわかりません。これを達成するための最良の方法は何ですか?

4

2 に答える 2

1

文字列内のアポストロフィの場合:

  • '%r'代わりに使用できます'%s'
  • my_text = "People's Land" 
    os.system("echo '%r' | pbcopy" % my_text)
    

文字列のシェル エスケープ バージョンを取得するには、次のようにします。

  • 使用できます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 に答える