Skip to main content
 首页 » 编程设计

python之仅列出子进程中的文件和目录名称 ls -l

2025年05月04日21fff_TT

在使用 Popen 或 check_output 的 python 子进程中,我需要列出给定源目录中的文件和目录。但是我只能使用命令ls -l。

示例代码

cmd = ["ls", "-l", source] 
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE) 
stdout, stderr = proc.communicate() 
exitcode = proc.returncode 
 
if exitcode != 0: 
    raise SystemError("Exitcode '{}', stderr: '{}', stdout: '{}'  for command: '{}'".format( 
        exitcode, stderr, stdout, cmd)) 

从上面的proc,通过使用grep 或任何其他方式,我是否可以只获得源目录中的文件和目录名称的列表而没有其他信息?

请您参考如下方法:

如果您坚持使用子流程,请尝试:

[x.split(' ')[-1] for x in stdout.decode().split('\n')[1:-1]] 

显然,这是一种非常“hacky”的方法。相反,我可以建议标准库 glob

import glob 
glob.glob(source + '/*') 

返回源中所有文件/目录名称的列表。

编辑:

cmd = ["ls", source] 
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE) 
stdout, stderr = proc.communicate() 
exitcode = proc.returncode 
stdout.decode("utf-8").split('\n')[:-1] 

也应该这样做。 -l 选项在这里不是必需的。