Python (バージョン 2.6.5) コード内からシェル コマンドを実行しようとしていますが、シェル (bash) 内で実行された同じコマンドとは異なる出力が生成されます。
バッシュ:
~> ifconfig eth0 | sed -rn 's/inet addr:(([0-9]{1,3}\.){3}[0-9]{1,3}).*/\1/p' | sed 's/^[ \t]*//;s/[ \t]*$//'
192.168.1.10
パイソン:
>>> def get_ip():
... cmd_string = "ifconfig eth0 | sed -rn \'s/inet addr:(([0-9]{1,3}\.){3}[0-9]{1,3}).*/\1/p' | sed 's/^[ \t]*//;s/[ \t]*$//\'"
... process = subprocess.Popen(cmd_string, shell=True, stdout=subprocess.PIPE)
... out, err = process.communicate()
... return out
...
>>> get_ip()
'\x01\n'
私の推測では、Python で実行しているときに何らかの方法で引用符をエスケープする必要があると思いますが、これについてどうすればよいかわかりません。
注: このコードを実行する必要があるマシンに、追加のモジュールをインストールしたり、python を更新したりすることはできません。Python 2.6.5 と標準ライブラリでそのまま動作する必要があります。