2

shPythonスクリプト内でgitコマンドを実行するために使用しています。

In [1]: from sh import git

In [2]: s = git("log", "-1", pretty="format:%h %s")

In [3]: print s
4f14a66 basic debug page

これは期待どおりに動作するようです。ただし、これを Django テンプレートで使用すると、[?1h= 4f14a66 basic debug page[m [K[?1l>. を使用して、この文字列に含まれる文字を確認しようとしましたが、repr()役に立ちませんでした:

In [4]: print repr(s)
4f14a66 basic debug page

sh返されるコマンドは、次の属性RunningCommandを持つ aになります。.stdout

In [5]: type(s)
Out[5]: sh.RunningCommand

In [7]: s.stdout
Out[7]: '\x1b[?1h\x1b=\r4f14a66 basic debug page\x1b[m\r\n\r\x1b[K\x1b[?1l\x1b>'

"4f14a66 basic debug page"つまり、エスケープなしで文字列を取得するにはどうすればよいですか? Bash からコマンドを実行しても問題ありません。

$ git log -1 --pretty="format:%h %s"
4f14a66 basic debug page
4

2 に答える 2

1

s.stdoutREPLではそれを印刷しませんが、そのrepr(). print s.stdout探しているものを取得するために使用します。

エスケープ コードが必要ない場合は、次を使用して実行することを検討してくださいsubprocess.call()。 stdout が tty でない場合、ほとんどのプログラムはエスケープ シーケンスを出力しません。

于 2012-11-28T17:36:21.190 に答える