没有" \ n"的Python子进程列表文件

时间:2017-05-29 19:34:36

标签: python subprocess strip

我在python上使用subprocess列出一个文件夹中的所有文件/文件夹:

def subprocess_list(command):
  p = subprocess.Popen(command,stdout=subprocess.PIPE, shell=True)
  proc_stdout = p.communicate()[0].strip()
  lista.append(proc_stdout.decode('utf-8'))
  retcode = p.wait()
subprocess_list('ls | grep aa')

当我打印" lista"我在单元素列表中获取所有路径:

lista=[aaa\naab\naac\n]

因此,为了将它们分开并获取每个文件,我首先将它们导出为.txt,然后将其调回并删除\n

with open('%s/files.txt'%Path_Desktop,'w') as file:
    for item in lista:
        file.write(item)

with open('%s/files.txt'%Path_Desktop) as file:
    content = file.readlines()
content = [x.strip() for x in content]

打印"内容":

content=['aaa','aab','aac']

有没有办法在没有出口部分的情况下直接进行?提前谢谢!

2 个答案:

答案 0 :(得分:2)

首先,你不应该使用子进程来调用ls。为了您的目的,glob或os模块是更好的选择。

为什么你会得到“\ n”字符串?好吧,你只需要调用一个子进程,将其输出作为字符串返回。

使用suprocess-ls解决方案,您现在可以继续使用“\ n”拆分字符串,以获得真正的python列表。

list = list.split("\n")

更好的是使用glob代替。 https://docs.python.org/3/library/glob.html

import glob
list = glob.glob("*aa*")

你会得到你想要的,但它是更快,更安全,更pythonic和更好的解决方案。

答案 1 :(得分:0)

我为此改变了子流程,不知道是否正确或相同,但到目前为止它运作良好。

lista = (os.popen('ls | grep aa').read()).split('\n')