2012-01-20 5 views
0

PID가있는 프로세스의 현재 작업 디렉토리를 확인하려고합니다. 명령 행 유틸리티 lsof는 비슷한 기능을합니다.ctypes와 libproc을 사용하는 MacOS 10.6에서 Python 2.5와 Python 2.6의 차이점을 알 수 있습니다. proc_pidinfo

host:dir user$ sudo /usr/bin/python2.6 script.py 2698 
<_FuncPtr object at 0x100419ae0> 
(2352, '/') 
host:dir user$ sudo /usr/bin/python2.5 script.py 2698 
<_FuncPtr object at 0x19fdc0> 
(0, '') 

(PID 2698 "이 활성 상태입니다 :

import ctypes 
from ctypes import util 
import sys 

PROC_PIDVNODEPATHINFO = 9 

proc = ctypes.cdll.LoadLibrary(util.find_library("libproc")) 
print(proc.proc_pidinfo) 

class vnode_info(ctypes.Structure): 
    _fields_ = [('data', ctypes.c_ubyte * 152)] 

class vnode_info_path(ctypes.Structure): 
    _fields_ = [('vip_vi', vnode_info), ('vip_path', ctypes.c_char * 1024)] 

class proc_vnodepathinfo(ctypes.Structure): 
    _fields_ = [('pvi_cdir', vnode_info_path), ('pvi_rdir', vnode_info_path)] 

inst = proc_vnodepathinfo() 
pid = int(sys.argv[1]) 
ret = proc.proc_pidinfo(pid, PROC_PIDVNODEPATHINFO, 0, ctypes.byref(inst), ctypes.sizeof(inst)) 
print(ret, inst.pvi_cdir.vip_path) 

이 스크립트는 파이썬 2.6에서 예상대로 파이썬 2.5에서 작동하지 않는 행동에도 불구하고, 그러나 다음은 파이썬 스크립트 소스입니다 .앱"). 다른 반환 값에 유의하십시오. 이 프로그램은 ctypes에 기반하고 있기 때문에 파이썬 자체에서 어떤 차이가 있는지 상상할 수 없습니다. Python 2.5와 동일한 동작이 자체 빌드 된 Python 3.2에서 발생합니다. 또는 2.5에 대한 해결책을 마련 - -

나는 내가 불확실성을 추적하는 데 도움을 줄 수있는 정보를 버전 모르겠지만 여기에 몇 가지 물건 : 사람에게

host:dir user$ otool -L /usr/bin/python2.6 
/usr/bin/python2.6: 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.0) 
host:dir user$ otool -L /usr/bin/python2.5 
/usr/bin/python2.5 (architecture i386): 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.0) 
/usr/bin/python2.5 (architecture ppc7400): 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.0) 


host:dir user$ uname -a 
Darwin host.local 10.8.0 Darwin Kernel Version 10.8.0: Tue Jun 7 16:33:36 PDT 2011; root:xnu-1504.15.3~1/RELEASE_I386 i386 

덕분에 그 여기에 무슨 일이 일어나고 있는지에 대한 단서가있다.

답변

0

나는 당신의 코드에 무엇이 잘못되었는지 모르지만 나는 이것을 psutil에서 구현했다. 이 관심있는 부분입니다 :

당신이하는 ctypes에 그 번역하거나 자신의 확장 modudle를 작성하는 결정할 수 있습니다.