2016-08-19 2 views
1

私はある時点でクリップボードに文字列を入れなければならないPython 3アプリケーションを持っています。システムコマンドechopbcopyを使用しており、正常に動作しています。ただし、文字列にアポストロフィが含まれている場合(および他の特殊文字が分かっている場合)、エラーが発生して終了します。コードサンプルは次のとおりです。Python3/OS Xでは、アポストロフィで文字列をターミナルコマンドに渡す方法は?

import os 

my_text = "Peoples Land" 
os.system("echo '%s' | pbcopy" % my_text) 

問題なく動作します。しかし、あなたは文字列に「人民の土地を」修正した場合、それはこのエラーを返します。

sh: -c: line 0: unexpected EOF while looking for matching `'' 
sh: -c: line 1: syntax error: unexpected end of file 

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

答えて

1

を:

あなたは shlex.quote()

を使用することができます

    • あなたは、文字列のシェルエスケープバージョンを取得するには代わりに'%s'
    • my_text = "People's Land" 
      os.system("echo '%r' | pbcopy" % my_text) 
      

    '%r'を使用することができます10

+0

私はこの提案を自分のコードに実装しようとしましたが、なぜ失敗したのか判断するのは難しかったです。 'shlex.quote()'を使うときと同じように、一重引用符を削除しなければならないことが分かりました。今それは大丈夫です;) –

1

これは実際にシェルのエスケープと関連があります。

コマンドラインでこれを試してみてください:Pythonで

echo 'People's Land' 

この

echo 'People'\''s Land'

をこのような何かが動作するはずです:文字列中のアポストロフィについては

>>> import os 
>>> my_text = "People'\\''s Land" 
>>> os.system("echo '%s' > lol" % my_text) 
+0

エスケープするようなPython関数はありますか?私はデータベースに入力された値を扱っているので、その変換を行うコードを持つ方が良いでしょう。 –

+0

https://docs.python.org/3.5/library/shlex.html – Vatsal

関連する問題