python - 如何在目录树结构中指定路径

标签 python linux subprocess

从子进程import Popen, PIPE

process = Popen(['/home/hadoop/BackupFolders/','tree','.','-d'], stdout=PIPE, stderr=PIPE)
stdout, stderr = process.communicate()

你好,我正在尝试运行这些代码行,以显示像 Linux/Unix 那样的目录树结构。我已经得到要显示的树结构,但仅针对当前工作目录。

每次我输入路径并运行时,它都会显示access denied。我将 shell 设置为 true 和 false,但它没有用。

我希望能够显示当前工作目录,但也可以提供指定其他路径的选项。

最佳答案

unix 中的 exec 通过传递一串参数来工作,第一个参数是可执行文件的位置或名称,后面的参数通常是选项。在上面的示例中,您的可执行文件是“树”,但您将 /home/hadoop/BackupFolders/ 作为列表中的第一个元素,因此基本上 python 试图运行 BackupFolders 目录,这当然是没有意义的,因此是一个错误。

此外,通常 token . 表示当前工作目录,因此命令 tree 。 -d 尝试使用选项 -d 在当前工作目录上运行树。要从 cwd 更改目标目录,请更改 .范围。因此 ['tree','/home/hadoop/BackupFolders/','-d']tree/home/hadoop/BackupFolders/-d

还有一个警告——您可能会在这里陷入困境。子进程 PIPE 上的内存是固定大小的,当您溢出该内存大小时,POpen 往往会挂起,因为 stdout 流一旦无法再写入管道就永远不会关闭。树确实没有固定的返回大小,因此挂起的风险很大。用临时文件替换该管道,稍后读取输出。或者更好地从 stdout 读取线程并异步运行它。

关于python - 如何在目录树结构中指定路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42908649/

相关文章:

c - 如何将数据从 C 导出到 MATLAB(在不同机器上)

python - shell=True 时如何确定 subprocess.Popen() 失败

python - 从类型中提取数据

python - 捕获任何 DoesNotExist 错误

python - spark函数中approxCountDsitinct和approx_count_distinct的区别

Python 以提升的 UAC 权限运行 Popen() 子进程

Python subprocess.Popen 使用 git pager

python - 如何在Enthought Canopy环境下中断Python的无限循环?

linux - 安装 OMNeT++ 的问题

linux - 在当前目录下搜索没有特定字符串的文件