在使用 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 选项在这里不是必需的。
