我在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']
有没有办法在没有出口部分的情况下直接进行?提前谢谢!
答案 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')