1

それがpythonのバグなのか、それとも何か他のものなのかはわかりません。

br0 IP アドレスを取得するための bash コマンドがあります。bashシェルでうまく機能します

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

しかし、それをpythonと組み合わせると、奇妙な結果が得られます。

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

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

私はPHPを試してみましたがsystem()、うまくいきます。Python でサブプロセスも試してみましたが、結果は同じです。

Pythonのパイプ処理の問題でしょうか?

Pythonで何が起こったのか知りたいですか、それとも他に見逃したことがありますか?

ありがとう。

4

1 に答える 1

1

Pythonは文字列のバックスラッシュを解釈しています。つまり、生の文字列を使用してみてください。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

[問題は、Pythonが"\1"を文字列'\x01'として扱うことです]

于 2012-09-26T06:59:14.870 に答える