簡體   English   中英

Python輸出美化子進程

[英]Python output beautifier subprocess

您好,我正在使用subprocess

import subprocess

proc = subprocess.Popen(['ls'], stdout=subprocess.PIPE)
output = proc.stdout.read()
print(output)

輸出正確

b'file.txt\nmain.py\nsource\ntest-page\n'

有什么辦法可以美化它,就像在 linux 服務器中一樣?

root@master:/home/python# ls
file.txt  main.py  source  test-page

使用split() by newline 獲取文件,然后在單獨的行上打印每個文件:

lines = output.split(b'\n')

for line in lines:
    print(line.decode())

在單獨的行上打印每個文件:

file.txt  
main.py  
source  
test-page

您可以使用

print(output.decode().rstrip().replace("\n", " " * 2))
file.txt   main.py   source   test-page
  • decode()是將字節轉成字符串
  • rstrip()刪除最后一個尾隨的"\n" ,但這是可選的
  • replace("\n", " " * 2))會將"\n" (換行符)替換成2個空格

ls使用的垂直格式的背景

終端使用空格分隔的柱狀輸出,請參閱ls上的 GNU 文檔

'--format=vertical'

在列中列出文件,垂直排序,沒有其他信息。 如果標准輸出是終端,這是ls的默認值。 它始終是dir程序的默認值。 GNU ls使用可變寬度的列在最少的行中顯示盡可能多的文件。

(加粗強調)

這意味着根據最長的文件名調整列寬並且列數可能會有所不同。 但它在列之間使用了 2 個空格。

簡單的

可以通過str.replace()實現簡單的兩個空格分隔。

output = b'file.txt\nmain.py\nsource\ntest-page'
vertical = output.decode().replace('\n', ' ' * 2)
print(vertical)

印刷:

file.txt  main.py  source  test-page

柱狀

一些高級庫可以做到這一點,例如columnar

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM