将文本块制作成列表

Making a Block of Text into a list

我正在编写一个 Python 脚本来枚举计算机上的所有进程 运行。我当前的代码执行此操作,但会以难以阅读的大块文本打印出来。如何改进我的脚本,使每个进程和所有进程的输出文本都显示在垂直列表中?

import subprocess
print(subprocess.check_output('set',shell=True)

*编辑:这是上述脚本的输出文本

set 应该已经用换行符打印出来了,所以如果它们没有出现,那么问题就比你告诉我们的更严重。如果你想分开设置,你总是可以加倍换行,例如:

import subprocess
print(subprocess.check_output('set',shell=True).replace('\n', '\n\n'))

如果问题是您 运行 在 Python 3 上并且 bytes 对象是一个大 blob,您可以 subprocess 将其解码为友好的可打印字符串:

print(subprocess.check_output('set',shell=True, universal_newlines=True))
# Yes, the name of the keyword is dumb; it sounds like it handles different
# line ending conventions, but on Python 3, it also decodes from `bytes`
# to `str` for you.

对于换行的一般情况(尽管它对只是 "too big" 的文本段落没有任何作用),您可能需要查看 textwrap module;它将一段文本拆分为 list 行,在单词边界处很好地包裹起来,这样您就不会将单词跨行拆分。

免责声明:我之前没有做过您正在做的事情,但这可能会奏效。

import subprocess

processes = subprocess.check_output('set',shell=True)

processes = processes.decode('UTF-8').split('\n') # convert bytes to unicodes and split 

for process in processes:
    print(process)

set is an internal command 在您的案例中显示 cmd.exe 环境变量。

要在 Python 中获取环境变量,请改用 os.environ

如果您想将 set 命令的输出作为字符串列表(未测试):

#!/usr/bin/env python3
import os
from subprocess import check_output

lines = check_output('cmd.exe /U /c set').decode('utf-16').split(os.linesep)