반응형

출처

https://stackoverflow.com/questions/20180543/how-to-check-the-version-of-python-modules

파이썬 모듈의 버전 확인하는 방법

저는 다음처럼 파이썬 모듈을 설치하였습니다. construct, statlibsetuptools 입니다.

# 다음처럼 다운로드 가능하기 위한 setuptools 설치
sudo apt-get install python-setuptools

# 가벼운 통계 도구를 위한 statlib 설치
sudo easy_install statlib

# 바이너리 데이터를 packing/unpacking하기 위한 construct 설치
sudo easy_install construct

저는 그들의 버전을 검사하기 위해 (프로그래밍으로) 가능한지 알고 싶습니다. 명령어로부터 제가 실행할 수 있는 python --version과 같은 것이 있을까요?


31 개의 답변 중 1 개의 답변

저는 easy install 대신에 pip를 사용하는 것을 제안합니다. pip로 당신은 모든 설치된 패키지를 알 수 있고 버전은 다음 명령으로 알 수 있습니다.

pip freeze

리눅스 시스템 대부분에서, 당신은 관심있는 특정 패키지를 행 단위로 찾기 위해 grep으로 (또는 윈도우즈에서는 findstr으로) 파이프를 사용할 수 있습니다.

Linux:

pip freeze | grep lxml

lxml==2.3

Windows:

pip freeze | findstr lxml

lxml==2.3

개별 모듈에서, 당신은 __version__ 속성 을 시도할 수 있습니다. 하지만, 그것이 없는 모듈도 있습니다.

python -c "import requests; print(requests.__version__)"
2.14.2

python -c "import lxml; print(lxml.__version__)"

Traceback (most recent call last):

File "", line 1, in

AttributeError: 'module' object has no attribute 'version'

마지막으로 질문의 명령에 sudo 접두사가 붙기 때문에 전역 Python 환경에 설치하는 것으로 보입니다. 예를 들어 virtualenvwrapper와 같은 Python 가상 환경 관리자를 살펴보는 것이 좋습니다.

반응형
반응형

출처 : http://stackoverflow.com/questions/1191374/using-module-subprocess-with-timeout

timeout과 함께 'subprocess' 모듈 사용하기

여기에 stdout 데이터를 리턴하는 임의의 명령어를 실행하거나 0이 아닌 종료 코드에서 예외를 발생시키는 파이썬 코드가 있습니다.

proc = subprocess.Popen(
    cmd,
    stderr=subprocess.STDOUT,  # Merge stdout and stderr
    stdout=subprocess.PIPE,
    shell=True)

communicate는 프로세스가 종료하기를 기다리는 데 사용합니다.

stdoutdata, stderrdata = proc.communicate()

subprocess 모듈은 몇 초 이상 실행하고 있는 프로세스를 없애는(kill) timtout 능력을 지원하지 않습니다. 그래서 communicate는 영원히 실행될 수 있습니다.
윈도우즈나 리눅스에서 실행하는 데 파이썬 프로그램에서 timeout을 구현할 수 있는 간단한 방법이 있을까요?


20 개의 답변 중 2개의 답변만 추려냄.

Python 3.3+ 에서

from subprocess import STDOUT, check_output

output = check_output(cmd, stderr=STDOUT, timeout=seconds)

output은 명령어의 표준 출력, 표준 에러 데이터가 합쳐진 것을 포함하는 바이트 문자열입니다.

check_output(check_output)은 proc.communicate() 메소드와는 다르게 문제 텍스트에 지정된 대로 0이 아닌 종료 상태에서 CalledProcessError를 발생시킵니다.

저는 불필요하게 자주 사용되기 때문에 shell=True를 제거하였습니다. cmd에서 실제로 필요한 경우 언제든지 다시 추가할 수 있습니다. shell=True를 추가하면 즉, 자식 프로세스가 자체 하위 항목을 생성하는 경우; check_output()은 시간 초과가 나타내는 것보다 훨씬 늦게 반환 할 수 있습니다. Subprocess timeout 실패를 참조하세요.

타임 아웃 기능은 3.2+ subprocess 모듈의 subprocess32(subprocess32) 백 포트를 통해 Python 2.x에서 사용할 수 있습니다.


유닉스를 사용하신다면,

import signal
  ...
class Alarm(Exception):
    pass

def alarm_handler(signum, frame):
    raise Alarm

signal.signal(signal.SIGALRM, alarm_handler)
signal.alarm(5*60)  # 5분
try:
    stdoutdata, stderrdata = proc.communicate()
    signal.alarm(0)  # 알람을 리셋한다.
except Alarm:
    print "헉, 너무 오래 걸립니다!"
    # 그 밖에 무엇이든
반응형

+ Recent posts