来自子进程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通过传递一个参数字符串来工作,第一个参数是可执行文件的位置或名称,下面的参数通常是选项。在上面的示例中,您的可执行文件是'tree',但是您的列表中有
/home/hadoop/BackupFolders/
作为第一个元素,因此基本上python试图运行BackupFolders目录,这当然是没有意义的,因此是一个错误。你知道吗此外,通常标记
.
表示当前工作目录,因此命令tree . -d
尝试使用选项-d在当前工作目录上运行tree。参数。因此['tree','/home/hadoop/BackupFolders/','-d']
或tree /home/hadoop/BackupFolders/ -d
。你知道吗这也是一个警告,你很可能会在这里超过你的头。子进程管道上的内存大小是固定的,当您溢出该内存大小时,POpen往往会挂起,因为一旦stdout流不能再写入管道,它就永远不会关闭。树确实没有固定的返回大小,因此存在很大的挂起风险。用临时文件替换该管道,然后读取输出。或者最好从stdout线程读取并异步运行它。你知道吗
相关问题 更多 >
编程相关推荐