2012-09-26 5 views
1

파이썬 버그 또는 다른 것이면 나는 모른다.sed 대체 서브 익스프레스 파이썬에서 시스템 호출

나는 br0 IP 주소를 얻는 bash 명령이 있습니다. 그것은

$ip -o -4 address show br0 | sed "s/^.*inet *\(.*\)\/[0-9]* brd.*$/\1/g" 
$192.168.10.1 #output this 

쉘 bash는 잘 작동하지만 파이썬과 결합 onece, 그것은 나에게 이상한 결과를 제공합니다 system()

>>>import commands as c 
>>>c.getstatusoutput('ip -o -4 address show br0 | sed "s/^.*inet *\(.*\)\/[0-9]* brd.*$/\1/g"') 

>>>(0, '\x01') #output 

내가 시도 PHP를하고 그것을 잘 작동합니다. 파이썬에서 서브 프로세스를 시도해 본 결과도 같습니다.

파이썬에서 파이프 처리 문제 일 수 있습니까?

파이썬에서 무슨 일이 일어 났는지 알고 싶습니다. 또는 내가 놓친 다른 것이 있다면?

감사합니다.

답변

1

파이썬이 문자열에서 백 슬래시를 해석하고 있습니다. 즉, 원시 문자열을 사용하십시오. r'ip -o -4 address show br0 | sed "s/^.*inet *\(.*\)\/[0-9]* brd.*$/\1/g"'

>>> import commands as c 
>>> c.getstatusoutput(r'ip -o -4 address show br0 | sed "s/^.*inet *\(.*\)\/[0-9]* brd.*$/\1/g"') 

그리고 당신은 호기심이 있다면, 차이이 시도하고주의 :

>>> print "s/^.*inet *\(.*\)\/[0-9]* brd.*$/\1/g" 
s/^.*inet *\(.*\)\/[0-9]* brd.*$//g 
>>> print r"s/^.*inet *\(.*\)\/[0-9]* brd.*$/\1/g" 
s/^.*inet *\(.*\)\/[0-9]* brd.*$/\1/g 

[문제가 파이썬 취급이다 "\ 1"문자열 '\ X01'등]

+0

을 원시 문자열은 http://docs.python.org/reference/lexical_analysis.html을 참조하십시오. – linarnan