Python lsof命令不';指定用户时,请不要在指定的目录中查找

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

因此,我正在编写一个python脚本,我的目标是使用lsof为本地用户列出特定目录(我的主文件夹)下所有打开的文件,并且只输出“uniq”条目

我的脚本如下所示:

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/
,它可能根本不存在。那么,您尝试它们想要实现什么呢?