Python 获取进程文件的路径

Python 获取进程文件的路径,python,linux,shell,operating-system,Python,Linux,Shell,Operating System,我正在尝试做一个程序,需要捕获正在使用的文件的完整路径(系统中的任何位置) 直接举个例子。 我打开了一个名为“notify.py”的文件,它位于 /home/miguel/Dropbox/prog/python/notify/ 目录 当我打电话时 ps aux 在linux shell中,与此文件的进程对应的进程行是 miguel 11798 0.7 0.4 512320 34176 pts/2 Sl 22:41 0:06 gedit notify.py 这并没有说

我正在尝试做一个程序,需要捕获正在使用的文件的完整路径(系统中的任何位置) 直接举个例子。 我打开了一个名为“notify.py”的文件,它位于

/home/miguel/Dropbox/prog/python/notify/ 
目录

当我打电话时

ps aux
在linux shell中,与此文件的进程对应的进程行是

miguel   11798  0.7  0.4 512320 34176 pts/2    Sl   22:41   0:06 gedit notify.py
这并没有说明我实际打开的文件的路径! 我想要的(并且已经寻找了几个小时,无论是使用ps、lsof还是python的psutil)是一种获得与该进程对应的文件的完整路径的方法,也就是说,我希望从该进程中获得上面引用的目录行


感谢您的回答

您可以尝试
readlink(2)
文件
/proc//exe
,它应该正是您想要的:

$ ls -l /proc/$$/exe
lrwxrwxrwx 1 aw aw 0 Apr  7 00:02 /proc/11700/exe -> /bin/zsh
$

但请注意,这并不是过于便携。它应该在Linux上工作,至少在FreeBSD上工作,但在其他Unice上可能会失败。这也是为什么(例如,
sshd
希望使用完整路径调用的原因,这样就足以使用
$0
(或
argv[0]
或与第0个命令行参数相对应的任何参数)来知道二进制文件的确切位置。没有可移植的方法来做到这一点。

可移植意味着什么?顺便说一下,用我的进程ID运行该命令,我只得到:
lrwxrwx 1 miguel miguel 0 Apr 6 22:44/proc/11798/exe->/usr/bin/gedit
,它不包含文件的路径,但打开文件的应用程序的路径看起来像是您想要的进程已打开的文件的路径。如果是这样的话,你应该在你的问题中澄清它,这是令人困惑的。如果您只需要解析进程命令路径(
gedit
),请使用
which gedit
。如果要查找由进程1234打开的文件,请查看
/proc/1234/fd/
我和前面的发言者一样:请澄清您的问题。如果您想知道特定进程打开的所有文件,请查看
/proc/$$/fd
。可移植意味着(在本文中)如果某些东西只在您使用的平台上工作(我猜在您的情况下,这将是Linux上的Python),或者在任何其他类似的系统上工作(有一个名为
POSIX
,定义了一个»常用«UNIX系统,例如FreeBSD、Solaris、HP/UX、AIX等应该支持的标准)
/proc/$$/*
方法很可能无法处理所有这些问题。