2016-08-19 4 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

:

  • 당신은 문자열의 쉘 이스케이프 버전을 얻으려면 '%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)) 
    
+0

코드에서이 제안을 구현하려고했지만 실패한 이유를 알아 내려고했습니다. 'shlex.quote()'를 사용할 때와 마찬가지로 여전히 작은 따옴표를 제거해야한다는 것을 알았습니다. 이제 괜찮아.;) –

1

이것은 실제로 쉘을 이스케이프 처리하는 것과 관련이 있습니다.

명령 행이 시도 :

echo 'People's Land' 

이 같은 파이썬 일이

echo 'People'\''s Land'

작동합니다 : 문자열에 아포스트로피를 들어

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

그런 종류의 이스케이프를 수행하는 파이썬 기능이 있습니까? 나는 데이터베이스에 입력 된 값을 다루고 있으므로 코드 변환을하는 것이 낫다. –

+0

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

관련 문제