我正在编写一个 Python 脚本来枚举计算机上运行的所有进程。我当前的代码会执行此操作,但会将其打印在一大块难以阅读的文本中。如何改进我的脚本以在每个进程和所有进程的垂直列表中显示输出文本?
import subprocess
print(subprocess.check_output('set',shell=True)
我正在编写一个 Python 脚本来枚举计算机上运行的所有进程。我当前的代码会执行此操作,但会将其打印在一大块难以阅读的文本中。如何改进我的脚本以在每个进程和所有进程的垂直列表中显示输出文本?
import subprocess
print(subprocess.check_output('set',shell=True)
set
是一个内部命令,在您的情况下显示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)
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.
对于换行的一般情况(尽管它对“太大”的文本段落没有任何作用),您可能需要查看textwrap
模块;它将文本块拆分为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)