将文本块放入列表中

时间:2015-10-02 01:44:49

标签: python subprocess python-3.5

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

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

*编辑:以下是上述脚本的输出文本 enter image description here

3 个答案:

答案 0 :(得分:0)

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)

答案 1 :(得分:-1)

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.

对于线条包装的一般情况(尽管它对于仅仅#34;太大而且#34;的文本段落没有任何作用),你可能想要查看textwrap module;它会将一段文本分成一个list行,这些行很好地包裹在单词边界处,因此您不会将单词划分为多行。

答案 2 :(得分:-1)

免责声明:我之前没有做过你做过的事,但这可能有用。

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)