Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将一块文本制作成列表_Python_Subprocess_Python 3.5 - Fatal编程技术网

Python 将一块文本制作成列表

Python 将一块文本制作成列表,python,subprocess,python-3.5,Python,Subprocess,Python 3.5,我正在编写一个Python脚本,它枚举计算机上运行的所有进程。我当前的代码可以这样做,但打印出来的是一大块难以阅读的文本。如何改进脚本,使每个进程和所有进程的输出文本都位于垂直列表中 import subprocess print(subprocess.check_output('set',shell=True) *编辑:这是上面脚本的输出文本 set应该已经用换行符打印了,所以如果它们没有显示出来,则说明问题比您告诉我们的更严重。如果要分开设置,可以将换行符对折,例如: import sub

我正在编写一个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上运行,
字节
对象是一个大blob,您可以将
子流程
解码为友好的可打印字符串:

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.

对于换行很好的一般情况(尽管它对“太大”的文本段落没有任何作用),您可能需要查看;它将一块文本拆分为一个
列表
行,这些行被巧妙地包装在单词边界处,这样您就不会让单词跨行拆分。

免责声明:我没有做过您以前正在做的事情,但这可能行得通

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)
显示案例中的
cmd.exe
环境变量

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

如果要将
命令的输出设置为字符串列表(未测试),请执行以下操作:


请举例说明您的输出应该是什么样子。我发现输出已经相当可读。
子流程。检查输出
返回字符串。您可以用它做任何您想做的事情,例如用
拆分
按换行将其拆分,这将创建一个列表。@user38034将按空格拆分。也许你指的是分割线。@wim我指的是
s.split('\n')
;-)也就是说,
splitlines
绝对更好(当文件恰好以换行符结尾时,它不会以空的
str
结束结果列表,许多文本编辑器会自动插入换行符),并提供在保留换行符的同时进行拆分的选项。@DylanF:
set
不太可能在这里使用utf-8;它可能是
cp437
,即,如果存在非ascii路径,则可能出现故障。问题中的输出清楚地表明换行符是
b'\r\n'
,而不是
'\n'
。替换('\n','\n\n')
不正确;输出显示OP使用python3
universal\u newlines=True
使用
locale.getpreferredencoding(False)
返回类似
cp1252
的内容,而
set
可能使用cmd.exe OEM编码,如
cp437
。如果出于某种原因您不想使用
os.environ
(可能在Windows上使用Unicode API),那么您可以尝试
#!/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)