복붙노트

[PYTHON] shlex.split의 반대는 무엇입니까?

PYTHON

shlex.split의 반대는 무엇입니까?

shlex.split의 결과를 어떻게 반전시킬 수 있습니까? 즉, 인용 부호가있는 문자열 목록이 주어지면 어떻게 "유닉스 쉘과 닮은"인용 문자열을 얻을 수 있습니까?

필자는 파이썬 버그를 찾아 내고 여기에 대응하는 기능 요청을 만들었습니다.

해결법

  1. ==============================

    1.이제 우리는 (3.3) shlex.quote 함수를 가지고 있습니다. 다른 것은 pipe.quote가 옮겨지고 문서화 된 것입니다 (pipes.quote를 사용하는 코드는 여전히 작동 할 것입니다). 전체 토론은 http://bugs.python.org/issue9723을 참조하십시오.

    이제 우리는 (3.3) shlex.quote 함수를 가지고 있습니다. 다른 것은 pipe.quote가 옮겨지고 문서화 된 것입니다 (pipes.quote를 사용하는 코드는 여전히 작동 할 것입니다). 전체 토론은 http://bugs.python.org/issue9723을 참조하십시오.

    subprocess.list2cmdline은 사용해서는 안되는 전용 함수입니다. 그러나 그것은 shlex로 옮겨지고 공식적으로 공개 될 수 있습니다. http://bugs.python.org/issue1724822도 참조하십시오.

  2. ==============================

    2.pipe.quote를 사용하는 것은 어떻습니까?

    pipe.quote를 사용하는 것은 어떻습니까?

    import pipes
    strings = ["ls", "/etc/services", "file with spaces"]
    " ".join(pipes.quote(s) for s in strings)
    # "ls /etc/services 'file with spaces'"
    

    .

  3. ==============================

    3.하위 프로세스는 subprocess.list2cmdline ()을 사용합니다. 공식 공개 API는 아니지만 하위 프로세스 문서에 언급되어 있으며 사용하는 것이 안전하다고 생각합니다. pipe.open ()보다 더 정교합니다 (더 좋든 나쁘 든).

    하위 프로세스는 subprocess.list2cmdline ()을 사용합니다. 공식 공개 API는 아니지만 하위 프로세스 문서에 언급되어 있으며 사용하는 것이 안전하다고 생각합니다. pipe.open ()보다 더 정교합니다 (더 좋든 나쁘 든).

  4. ==============================

    4.'foo'와 'foo' "는 shlex.split에 의해 같은 목록으로 변환됩니다.

    'foo'와 'foo' "는 shlex.split에 의해 같은 목록으로 변환됩니다.

    In [44]: shlex.split("'foo'")
    Out[44]: ['foo']
    
    In [45]: shlex.split("foo")
    Out[45]: ['foo']
    

    그래서 모든 경우에 shlex.split을 뒤집을 수 있다고 생각하지는 않습니다 만, 이것은 당신을 닫을 수 있습니다 :

    In [20]: import subprocess
    In [21]: subprocess.list2cmdline(shlex.split('prog -s "foo bar"'))
    Out[21]: 'prog -s "foo bar"'
    
    In [22]: subprocess.list2cmdline(shlex.split('prog -s "foo bar" "baz"'))
    Out[22]: 'prog -s "foo bar" baz'
    
  5. ==============================

    5.Shlex.join ()을 추가하는 기능 요청이 있습니다. 현재로서는, 대부분 shlex.quote ()로 넘어가는 것처럼 대부분 진행되지는 않습니다. 버그 보고서에는 제안 된 구현이 언급되어 있습니다.

    Shlex.join ()을 추가하는 기능 요청이 있습니다. 현재로서는, 대부분 shlex.quote ()로 넘어가는 것처럼 대부분 진행되지는 않습니다. 버그 보고서에는 제안 된 구현이 언급되어 있습니다.

    ' '.join(shlex.quote(x) for x in split_command)
    

    https://bugs.python.org/issue22454를 참조하십시오.

  6. from https://stackoverflow.com/questions/4748344/whats-the-reverse-of-shlex-split by cc-by-sa and MIT license