2014-10-22 2 views
7

문자열 인수를 전달할 수 있도록 명령 줄에서 실행하는 스크립트가 있습니다.문자열 내에서 개행 문자를 명령 줄에서 python 스크립트로 전달

script.py --string "thing1\nthing2" 

과 같이 '\ n'을 새 줄로 해석합니다. 단순히 하드 코드 스크립트에 문자열 "thing1의 \의 nthing2"는이 작업을 수행하는 경우

thing1 
thing2 

보다는 thing1\nthing2

을 : string="thing1\nthing2" 경우에 나는

print string 

반환 할 싶어 , getopt를 통해 명령 행 인자로 입력되면, 그것을 인식하지 못합니다. 나는이 접근법의 숫자를 시도했다 : 으로 문자열을 읽고, 커맨드 라인에서 등을 지정하는 다양한 방법, 아무것도 작동하지 않는 것. 아이디어? 이것은 완전히 불가능한가요?

+0

이것은 파이썬 질문보다 쉘 질문과 비슷합니다. 아마도 당신이 사용하고있는 셸 코드를 보여줘야하고 (예를 들어'bash') – mgilson

답변

-3

이 하나가 비교적 간단하고 나는 아무도 그것을 말했다있다 놀랜다 : 당신이 떠들썩한 파티를 사용하지 않는 경우에도, 여전히 좋은 읽기입니다. 파이썬 스크립트에서

는 다음 코드를

print string.replace("\\n", "\n") 

를 작성하고 새 라인이 아닌 \ n을 인쇄 문자열을 얻을 것이다.

+2

그건 잘못된 인수 데이터를 보완하기위한 해킹이 더 많습니다. –

+0

나는 그것이 해킹이다라고 말하지 않을 것이다. 파이썬이 문자열에 대해 수행하는 이스케이프 처리를 역전시키는 간단한 솔루션을 제공합니다. 다른 모든 솔루션은 사용자가 bash에 있어야합니다. 이것은 파이썬 솔루션을 제공합니다. – Ben

+0

그들은 bash를 예제로 사용하지만, 다른 답변은 실제로 사용자가 쉘과 올바르게 상호 작용한다는 것입니다. 그/그녀는 분명히 쉘을 통해 파이썬을 호출하기 때문에 쉘 중심 응답이 올바른 것입니다. 또한, 파이썬은 문자열로 이스케이프 처리를하지 않습니다. 파이썬에서 문자 '\'와 'n'이있는 문자열을 얻고 있습니다. 이 문자열은 파이썬 파일에서 리터럴이 아니기 때문에 이스케이프되지 않았습니다. –

8

https://stackoverflow.com/a/4918413/478656에서 배쉬에서 사용할 수 있습니다

script.py --string $'thing1\nthing2' 

예를 들어,

하지만 이는 Bash 관련 구문입니다.

+0

당신이 사용하고있는 쉘에 태그를 붙이면 어떤 영향을 미치지 않습니다. –

+2

작은 따옴표는 중요합니다. – dionyziz

1

이것은 쉘이 모든 명령 구문 분석을 수행하기 때문에 실제로는 쉘 질문입니다. 파이썬은 무슨 일이 일어나고 있는지 신경 쓰지 않고 exec 시스템 콜에서만 오는 것을 얻는다. bash를 사용하고 있다면, 큰 따옴표 사이에 어떤 종류의 이스케이프는하지 않습니다. 당신이 \n, \t, 또는 \xnn 이스케이프하는 등의 일을하려면 다음 구문은 bash는 확장 :

python test.py $'thing1\nthing2' 

또한 수행 할 수 있습니다

python test.py "thing1 
thing2" 

여기 경우 인용 떠들썩한 파티에 좀 더 많은 정보가 있어요 너는 흥미있어.

http://mywiki.wooledge.org/Quotes

관련 문제