从子进程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/