Python lsof命令不';指定用户时,请不要在指定的目录中查找
因此,我正在编写一个python脚本,我的目标是使用lsof为本地用户列出特定目录(我的主文件夹)下所有打开的文件,并且只输出“uniq”条目 我的脚本如下所示:Python lsof命令不';指定用户时,请不要在指定的目录中查找,python,bash,lsof,Python,Bash,Lsof,因此,我正在编写一个python脚本,我的目标是使用lsof为本地用户列出特定目录(我的主文件夹)下所有打开的文件,并且只输出“uniq”条目 我的脚本如下所示: import os, sys, getpass user = getpass.getuser() cmd = "lsof -u " + user + " +d ~ | sort | uniq" os.system(cmd) 这样做是我希望它做的,它为当前本地用户执行lsof,但它无法在我指定的主目录中查找。相反,它在根目录上执行ls
import os, sys, getpass
user = getpass.getuser()
cmd = "lsof -u " + user + " +d ~ | sort | uniq"
os.system(cmd)
这样做是我希望它做的,它为当前本地用户执行lsof,但它无法在我指定的主目录中查找。相反,它在根目录上执行lsof,并为用户列出整个文件系统的所有lsof。但是,当我在没有-u user
的情况下执行相同的命令时,它会特别显示在主目录中。我一直在研究这到底是为什么,是的,我曾尝试使用+d/home/
和+d~/home/
而不是仅仅+d~
来实现这一点,但没有成功,所以我有点不知所措。任何建议都很好:)来自:
通常,特别说明的列表选项是OR-即,指定不带地址的-i选项,-ufoo选项生成所有网络文件或属于用户“foo”拥有的进程的文件的列表
有一些例外,但没有一个适用于你的情况
因此,-ume+d~
表示“我打开的或在我的主目录中的所有文件”
那你想怎么做
-a选项可用于指定和选择。例如,指定-a、-U和-ufoo只会生成属于用户“foo”拥有的进程的UNIX套接字文件列表
在那里扔一个-a
:
cmd = "lsof -a -u " + user + " +d ~ | sort | uniq"
顺便说一句,一般来说,您确实不想在Python中使用os.system
,这就是为什么要特别指出:
子流程
模块为生成新流程和检索其结果提供了更强大的功能;使用该模块比使用此功能更可取。有关一些有用的方法,请参阅子流程
文档中的部分
实际上,为什么要使用
sort
和uniq
而不是Python中的排序?或者,如果您只想运行这个shell管道,而不想在Python中以任何方式处理它,为什么首先要使用Python而不是bash?-a
标志将选项连接在一起你为什么期望+d/home/
或+d~/home/
做任何类似于+d~
的事情呢?通常,
指的是类似/home/me
的东西,而不仅仅是/home
,你不太可能在/home
打开任何文件,除了/home/meode>(请注意,+d
不是递归的,如果您需要的话,可以使用+d
)并且~/home/
将是/home/me/home/
,它可能根本不存在。那么,您尝试它们想要实现什么呢?