인수 목록이 있습니다. ["hello", "bobbity bob", "bye"]
. 어떻게 이들을 적절하게 쉘에 전달할 수 있습니까?파이썬에서 인수 목록에서 셸 명령 줄을 포맷하는 방법
잘못된 :
>>> " ".join(args)
hello bobbity bob bye
올바른 :
은 구식 방법 뭐가 잘못>>> magic(args)
hello "bobbity bob" bye
인수 목록이 있습니다. ["hello", "bobbity bob", "bye"]
. 어떻게 이들을 적절하게 쉘에 전달할 수 있습니까?파이썬에서 인수 목록에서 셸 명령 줄을 포맷하는 방법
잘못된 :
>>> " ".join(args)
hello bobbity bob bye
올바른 :
은 구식 방법 뭐가 잘못>>> magic(args)
hello "bobbity bob" bye
subprocess.list2cmdline
사용할 수
:
In [26]: import subprocess
In [34]: args=["hello", "bobbity bob", "bye"]
In [36]: subprocess.list2cmdline(args)
Out[36]: 'hello "bobbity bob" bye'
아 완벽한 ... 정확히 무엇 나는 원했다. 나는 그것이 왜 문서화되어 있지 않은지 궁금합니다. – Claudiu
+1, 당신은 내 마음을 날려 버렸습니다! – SingleNegationElimination
:
>>> args = ["hello", "bobbity bob", "bye"]
>>> s = ""
>>> for x in args:
... s += "'" + x + "' "
...
>>> s = s[:-1]
>>> print s
'hello' 'bobbity bob' 'bye'
그것은 단일 경우 문제가되지 않습니다 단어 인수는 좋은데.
문제를 해결하는 가장 쉬운 방법은 텍스트에 두 단어 이상이있을 때 \ "... \"를 추가하는 것입니다. 당신을 위해
# Update the list
for str in args:
if len(str.split(" ")) > 2:
# Update the element within the list by
# Adding at the beginning and at the end \"
...
# Print args
" ".join(args)
실제로 쉘 스크립트에 값을 보내는 경우, subprocess.popen
이 처리 :
그래서 그렇게하는
http://docs.python.org/library/subprocess.html?highlight=popen#subprocess.Popen
그렇지 않으면, 당신이 아래로있어 생각 문자열 조작. shlex.split
은 당신이 원하는 것과 정반대로 행동하지만, 반대로 보이지 않습니다.
+1 확실히 올바른 방법. –
당신이 어떤 인수가 따옴표' "'포함될 수 있습니다 때 경우를 처리해야합니까 '의? s 또는 백 슬래시'\ '' – SingleNegationElimination
@TokenMacGuy : 예 .. 기본적으로 정확히 어떻게 popen으로 전달 될지 알고 싶지만 명령 줄로 사용하십시오 – Claudiu