Popen
标准输出的输出与从Shell运行命令或使用os.system
的输出不同:
cmd = ['git', 'diff', commitHash, '--stat']
print Popen(cmd, stdout=PIPE).stdout.read().strip()
os.system(' '.join(cmd))
Popen
的输出:
src/tech/dalvik/sidebar.md | 10 -
.../encryption/android_crypto_implementation.md | 359 --
src/tech/encryption/index.md | 22 -
src/tech/encryption/sidebar.md | 9 -
src/tech/index.md | 58 -
src/tech/nfc/index.md | 25 -
src/tech/nfc/sidebar.md | 7 -
src/tech/sidebar.md | 5 -
templates/footer | 3 +-
templates/includes | 2 +-
templates/sidebar | 2 +-
257 files changed, 32311 insertions(+), 11358 deletions(-)
os.system
的输出(与从Shell运行相同)
src/tech/dalvik/sidebar.md | 10 -
src/tech/encryption/android_crypto_implementation.md | 359 ---------
src/tech/encryption/index.md | 22 -
src/tech/encryption/sidebar.md | 9 -
src/tech/index.md | 58 --
src/tech/nfc/index.md | 25 -
src/tech/nfc/sidebar.md | 7 -
src/tech/sidebar.md | 5 -
templates/footer | 3 +-
templates/includes | 2 +-
templates/sidebar | 2 +-
257 files changed, 32311 insertions(+), 11358 deletions(-)
我如何让subprocess.Popen
像os.system
一样工作?
我在此处找到了类似的问题:Stdout captured from pipe in Python is truncated,但设置LANG
环境变量似乎无效。
谢谢!
答案 0 :(得分:1)
我不认为输出实际上是被截断的。
可能git
会给你不同的输出,试图最好地向你展示差异统计数据。
从您的示例中,我猜这个问题是envvar COLUMNS
的不同值。
检查您的终端有多少列:
$ echo $COLUMNS
并在Popen
调用中设置此envvar:
Popen(cmd, stdout=PIPE, env={'COLUMNS':'249'})