반응형

출처

https://stackoverflow.com/questions/31684375/automatically-create-requirements-txt

자동으로 requirements.txt 생성하기

때때로 저는 github로부터 파이썬 소스 코드를 다운받지만 모든 의존성이 어떻게 설치되는지 모릅니다. 만약 requirements.txt 파일이 없다면 직접 손으로 그것을 만들어야 합니다.
질문
파이썬 소스 디렉터리가 주어졌을 때, 자동으로 import 섹션으로부터 requirements.txt을 생성하는 것이 가능할까요?


25 개의 답변 중 2 개의 답변

개발 흐름을 개선하려면 Pipenv 또는 기타 도구를 사용하는 것이 좋습니다.

pip3 freeze > requirements.txt  # Python3
pip freeze > requirements.txt  # Python2

가상환경을 사용하지 않는다면 pigar가 좋은 선택이 될 수 있습니다.


자동으로 requirements.txt 생성하기 위해 다음 코드를 사용할 수 있습니다.

pipreqs에 대한 더 관련된 정보는 여기서 찾을 수 있습니다.

가끔 pip freeze를 사용할 수 있지만 현재 프로젝트에서 사용하지 않는 패키지를 포함하여 환경의 모든 패키지가 저장됩니다.

반응형
반응형

출처

is_displayed() element 메소드 - 셀레니움 파이썬

셀레니움의 파이썬 모듈은 파이썬의 자동화된 테스트를 수행하기 위해 만들어졌습니다. 셀레니움 파이썬은 기능/승인 테스트를 작성하는 간단한 API를 제공합니다.셀레니움 파이썬을 사용하여 웹페이지를 열려면 - 다음 get 메소드를 사용하여 링크 탐색하기을 확인하세요. 해당 주소로 갈 수 있다는 것만으로는 그다지 유용하지 않습니다. 우리가 정말 원하는 것은 페이지 또는 더 구체적으로 페이지의 HTML element와 상호작용하는 것 입니다. 셀레니움에서 사용하는 element를 찾는 다양한 전략이 있습니다. 다음 찾는 전략을 확인하세요. 이 글은 셀리니움에서 is_displayed 메소드를 사용하는 방법에 대해 설명합니다.is_replayed 메소드는 element가 사용자에게 보이는지 아닌지 확인하는 데 사용됩니다. 이는 불리언 값 True 또는 False가 리턴됩니다.

문법

element.is_displayed()

예시

<a href="https://www.geeksforgeeks.org/" id="link" />Text Here</a>

element를 찾기 위해 찾는 전략의 하나를 사용할 필요가 있습니다. 예를 들어,

element = driver.find_element_by_id("link")
element = driver.find_element_by_xpath("//a[@id='link']")

여러개의 element를 찾기 위해 우리는 다음을 사용할 수 있습니다.

elements = driver.find_elements_by_id("link")

이제 이 element가 표시되는지 확인할 수 있습니다.

text_length = element.is_displayed()

셀레니움 파이썬에서 is_displayed element 메소드를 사용하는 방법?

셀레니움 파이썬에서 이 메소드를 표현하기 위해 https://www.geeksforgeeks.org/ 를 사용합시다. geeksforgeeks에서 navigation bar에 course tab을 볼 수 있는지 확인합니다.

프로그램

# import webdriver
from selenium import webdriver

# create webdriver object
driver = webdriver.Firefox()

# get geeksforgeeks.org
driver.get("https://www.geeksforgeeks.org/")

# get element
element = driver.find_element_by_link_text("Courses")

# print value
print(element.is_displayed())

** 출력**

(venv) [naveen@naveen articles]$ python run.py
True
(venv) [naveen@naveen articles]$
반응형
반응형

출처
https://stackoverflow.com/questions/59371973/quickfix-python-plugin-use-case-for-testing-segmentation-fault-error

QuickFix 파이썬 플러그인 - 테스트 케이스 용도 - segmentation fault 오류

우리는 Fix 서버로부터 메세지를 주고 받기 위해 QuickFix를 사용하는 곳에서 테스트 자동화 프레임워크 (PyTest+Quickfix)를 만들었습니다. 우리가 (임의의 양으로) 많은 양의 데이터를 보낼 때 우리는 Segmentation fault 오류가 발생하였습니다. 일부의 작은 양의 테스트 케이스는 잘 작동하였습니다. QuickFix의 내부 상태가 잘못된 거라 생각합니다. (유지하는 실제 세션에 대해 알고 있음)

다음은 코드의 일부분입니다.

class MyFixApp(quickfix.Application):
    class State(Enum):
        NONE = 0
        LOGGED_IN = 1
        LOGGED_OUT = 2

    def __init__(self, config_file, timeout_seconds=1):
        super().__init__()
        self.out_messages_queue = queue.Queue()  # blocking queue of quickfix outbound messages
        self.in_messages_queue = queue.Queue()  # blocking queue of quickfix inbound messages
        self.all_messages_list = list()  # list of all quickfix messages
        self.parser = simplefix.FixParser()
        self.settings = quickfix.SessionSettings(config_file)
        self.storeFactory = quickfix.FileStoreFactory(self.settings)
        self.logFactory = quickfix.FileLogFactory(self.settings)
        self.timeout_seconds = timeout_seconds
        self.sessionID = None  # This is just a stateless collection of sender comp, target comp, etc...
        self.state = FixApp.State.NONE
        # initiate the socket last, because this may call into the
        # callbacks below and we need all the members constructed
        self.initiator = quickfix.SocketInitiator(self, self.storeFactory, self.settings, self.logFactory)

    def wait_for_next_in(self, timeout=1):
        return self.in_messages_queue.get(block=True, timeout=timeout)

    def wait_for_next_in_matching(self, subset, skipped=None, timeout=None):
        if timeout is None:
            timeout = self.timeout_seconds
        msg = self.wait_for_next_in(timeout=timeout)
        matches = FixApp.message_contains(msg, subset)
        if matches:
            return msg
        assert skipped is not None, f"expected={subset} msg={msg}"
        skipped.append(msg)
        return self.wait_for_next_in_matching(subset=subset, skipped=skipped, timeout=timeout)

    def login(self, timeout=30):
        print(f"Logging in {threading.get_ident()}")
        self.initiator.start()
        FixApp.wait_until(lambda: self.state is FixApp.State.LOGGED_IN, timeout)
        time.sleep(self.timeout_seconds)
        print(f"Logged in")

    # 30 seconds is needed for removing the session from QuickFix
    def logout(self, timeout=30):
        if not self.sessionID:
            print(f"Logging out without session")
            return
        print(f"Logging out from {self.sessionID} {threading.get_ident()}")
        self.initiator.getSession(self.sessionID).disconnect()
        FixApp.wait_until(lambda: self.state is FixApp.State.LOGGED_OUT, timeout)
        time.sleep(self.timeout_seconds)  # somehow, this needs more time. Remove this, and the following stop fails
        print(f"Logged out")
        self.initiator.stop()
        FixApp.wait_until(lambda: self.initiator.isStopped(), timeout)
        print(f"Initiator stopped")

    @staticmethod
    def wait_until(condition, timeout_sec):
        start = time.time()
        while not condition() and (time.time() - start) < timeout_sec:
            time.sleep(0.1)
        assert condition(), condition()

Stack trace:

#0  0x00007ffff7665e5b in raise () from /lib64/libpthread.so.0
#1  <signal handler called>
#2  0x00007fffee803d14 in FIX::Initiator::connect() () at C++/Initiator.cpp:139
#3  0x00007fffee7fce74 in FIX::SocketInitiator::onStart (this=0x555556a3c5d0) at C++/SocketInitiator.cpp:89
#4  0x00007fffee801cee in FIX::Initiator::startThread (p=<optimized out>) at C++/Initiator.cpp:292
#5  0x00007ffff765b594 in start_thread () from /lib64/libpthread.so.0
#6  0x00007ffff6bf400f in clone () from /lib64/libc.so.6

파이썬에서는 이 라인이 실패합니다. (줄 번호가 첨부된 코드와 일치하지 않습니다.)

Thread 0x00007ffff7fde540 (most recent call first):
  line 187 in wait_until
  line 153 in login

다음은 일치하는 라인입니다.

FixApp.wait_until(lambda: self.state is FixApp.State.LOGGED_IN, timeout)

2개의 답변 중 1개의 답변

해결 방법을 수행했습니다. 세션을 중지(stop)하는 부분을 변경했습니다. self.initiator.stop(True) + 결국 모든 세션 및 로그 파일을 제거했습니다. 이 중 하나만 하면 작동하지 않습니다.

반응형
반응형

출처

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 가상 환경 관리자를 살펴보는 것이 좋습니다.

반응형
반응형

출처 : https://huichen-cs.github.io/course/CISC7334X/20FA/lecture/pymcast/

Python에서 멀티캐스트 프로그래밍

차례

  • 소개
  • IPv4 멀티캐스트 주소
  • UDP 데이터그램 멀티캐스트
  • 프로그램 예시와 실험 환경
    • 전송 프로그램 (mcastsend.py)
    • 수신 프로그램 (mcastrecv.py)
    • 시연
      • 가정
      • 시연 실행하기
      • 출력
    • 연습과 탐색

소개

통신 패턴을 설명하는 몇 가지 용어가 있습니다. 이러한 용어는 모두 "-cast"로 끝나고 유니캐스트, 브로드캐스트, 멀티캐스트, 애니캐스트 및 지오캐스트를 포함합니다. 여기서는 단일 패킷의 복사본을 가능한 모든 대상의 선택된 하위 집합으로 전달하는 기술인 멀티캐스트에 특히 관심이 있습니다. TCP/IP는 멀티캐스트를 지원합니다. 여기서 우리의 목표는 TCP/IP 프로토콜 스택에서 멀티캐스트의 개념을 설명하기 위해 기초적인 Python 프로그램을 작성하는 것입니다.

IPv4 멀티캐스트 주소

IP 주소에는 몇 가지 범주가 있습니다. 멀티캐스트 주소는 범주입니다. 224.0.0.0/4 범위의 모든 IPv4 주소는 그룹, 즉 우리가 패킷을 전달할 모든 가능한 호스트의 선택된 하위 집합을 정의하는 멀티캐스트 주소입니다. 이 "224.0.0.0/4"와 같은 IP 주소 범위는 소위 CIDR 표기법에 있습니다. 이 특별한 경우 기본적으로 최상위 4비트(또는 4비트 접두사)가 224.0.0.0과 동일한 모든 IPv4 주소가 이 범위에 있음을 의미합니다. (수학적 경사?의 경우 224.0.0.0/4는 {a|∀a,a∧f0000000h ≡ f0000000h} 다음의 IPv4 주소 집합을 정의합니다.

UDP 데이터그램 멀티캐스트

TCP/IP 프로토콜 스택에서 UDP는 데이터그램 멀티캐스트 서비스를 실현합니다.

프로그램 예시와 실험 환경

여기 UDP 데이터그램 멀티캐스트 예시는 두개의 파이썬 프로그램으로 구성됩니다. mcastsend.py는 전송 프로그램이며 mcastrecv.py는 수신 프로그램 입니다. 우리는 4개의 가상 머신을 사용하여 멀티캐스트 개념을 시연하기 위해 프로그램을 실행합니다.

전송 프로그램 (mcastsend.py)

import socket
import sys

def help_and_exit(prog):
    print('Usage: ' + prog + ' host_ip mcast_group_ip mcast_port_num message',
        file=sys.stderr)
    sys.exit(1)

def mc_send(hostip, mcgrpip, mcport, msgbuf):
    # UDP 소켓을 생성한다
    sender = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM, \
            proto=socket.IPPROTO_UDP, fileno=None)
    # 멀티캐스트 (멀티캐스트 그룹 IP 주소, 전송할 포트 번호) 짝인 엔드 포인트를 정의한다.
    mcgrp = (mcgrpip, mcport)

    # 멀티캐스트 데이터그램이 얼마나 많은 홉(hop)을 여행할 수 있는지 정의한다.
    # IP_MULTICAST_TTL를 따로 정의하지 않는다면 기본 값은 1이다. 
    sender.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 1)

    # 멀티캐스트 데이터그램 전송을 담당하는 네트워크 인터페이스(NIC)를 정의합니다.
    # 그렇지 않으면 소켓은 기본 인터페이스를 사용합니다. (루프백이 0이면 ifindex = 1)
    # 데이터그램을 여러 NIC로 전송하려면 각 NIC에 대한 소켓을 만들어야 합니다.
    sender.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_IF, \
         socket.inet_aton(hostip))

    # 버퍼에서 데이터그램을 전송합니다
    sender.sendto(msgbuf, mcgrp)

    # 소켓 자원을 해제합니다 
    sender.close()


def main(argv):
    if len(argv) < 5:
        help_and_exit(argv[0])

    hostipaddr = argv[1]
    mcgrpipaddr = argv[2]
    mcport = int(argv[3])
    msg = argv[4]

    mc_send(hostipaddr, mcgrpipaddr, mcport, msg.encode())

if __name__=='__main__':
    main(sys.argv)

수신 프로그램 (mcastrecv.py)

import sys
import socket
import struct


def help_and_exit(prog):
    print('Usage: ' + prog + ' from_nic_by_host_ip mcast_group_ip mcast_port')
    sys.exit(1)

def mc_recv(fromnicip, mcgrpip, mcport):
    bufsize = 1024

    # UDP 소켓을 생성한다
    receiver = socket.socket(family=socket.AF_INET, type=socket.SOCK_DGRAM, \
            proto=socket.IPPROTO_UDP, fileno=None)

    # 멀티캐스트 (멀티캐스트 그룹 IP 주소, 전송할 포트 번호) 짝인 엔드 포인트로부터 
    # 전송된 데이터그램을 수신하기 위한 소켓을 설정한다.
    # 이 소켓은 전송 프로그램의 짝과 매칭 되어야 한다.
    bindaddr = (mcgrpip, mcport)
    receiver.bind(bindaddr)

    # 소켓을 의도한 멀티캐스트 그룹에 조인합니다. 그 의미는 두 가지입니다.
    # 멀티캐스트 IP 주소에 의해 식별되는 의도된 멀티캐스트 그룹을 지정합니다.
    # 또한 어떤 네트워크 인터페이스에서 (NIC) 소켓은 의도한 멀티캐스트 그룹에 대한 데이터그램을 수신합니다.
    # socket.INADDR_ANY는 시스템의 인터페이스(ifindex = 루프백 인터페이스가 있는 경우 1)에서 
    # 기본 네트워크를 의미한다는 점에 유의하는 것이 중요합니다.
    # 여러 NIC에서 멀티캐스트 데이터그램을 수신하려면
    # 각 NIC용 소켓을 생성해야 합니다. 또한 할당된 IP 주소로 NIC를 식별합니다.
    if fromnicip == '0.0.0.0':
        mreq = struct.pack("=4sl", socket.inet_aton(mcgrpip), socket.INADDR_ANY)
    else:
        mreq = struct.pack("=4s4s", \
            socket.inet_aton(mcgrpip), socket.inet_aton(fromnicip))
    receiver.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)

    # 메세지를 수신한다
    buf, senderaddr = receiver.recvfrom(1024)
    msg = buf.decode()

        # 자원을 해제한다
        receiver.close()

    return msg

def main(argv):
    if len(argv) < 4:
        help_and_exit(argv[0])

    fromnicip = argv[1] 
    mcgrpip = argv[2]
    mcport = int(argv[3])


    msg = mc_recv(fromnicip, mcgrpip, mcport)
    print(msg)

if __name__=='__main__':
    main(sys.argv)

시연

가정

편의를 위해 4개의 리눅스 가상 머신을 다음처럼 이름을 만들고 다음 표에 주어진 IPv4 주소가 있다고 가정합니다.

호스트 이름 IPv4 주소
eastny 192.168.56.1
midwood 192.168.56.3
flatbush 192.168.56.4
bushwick 192.168.56.5

두 개의 멀티캐스트 그룹이 있다고 가정합니다.

IPv4 멀티캐스트 그룹 1 IPv4 멀티캐스트 그룹 2
224.1.1.5 234.3.2.1

전송자는 엔드 포인트를 식별하고 UDP를 사용하기로 결정하였고 4개의 호스트로 다음처럼 두 개의 프로그램을 배포합니다.

호스트 프로그램
midwood mccastsend.py
eastny mccastrecv.py
flatbush mccastrecv.py
bushwick mccastrecv.py

시연 실행하기

우리는 다음처럼 프로그램을 실행합니다.

  1. 첫째, 우리는 다음처럼 eastnyflatbush에서 mcastrecv.py를 실행합니다.
brooklyn@flatbush:~$ python mcastrecv.py 192.168.56.104 224.1.1.5 50001
brooklyn@eastny:~$ python mcastrecv.py 192.168.56.101 224.1.1.5 50001
  1. 우리는 bushwick에서 mcastrecv.pyscapy3를 두 개의 터미널에서 둘 다 실행합니다.
brooklyn@bushwick:~$ python mcastrecv.py 192.168.56.105 234.3.2.1 50001
brooklyn@bushwick:~$ sudo scapy3
>>> packets = sniff(prn=lambda p: p.summary(), filter='udp port 50001')
  1. 마지막으로 우리는 mcastsend.pymidwood에서 실행합니다.
brooklyn@midwood:~$ python mcastsend.py 192.168.56.103 224.1.1.5 50001 "Hello, World!"

출력

출력은 다음과 같습니다.

flatbush에서 우리는 다음을 관찰합니다.

brooklyn@flatbush:~$ python mcastrecv.py 192.168.56.104 224.1.1.5 50001
Hello, World!
brooklyn@flatbush:~$

eastny에서 우리는 다음도 관찰합니다.

brooklyn@eastny:~$ python mcastrecv.py 192.168.56.101 224.1.1.5 50001
Hello, World!
brooklyn@eastny:~$

하지만, bushwick에서 mcastrecv.py는 IPv4 주소 192.168.56.101에 의해 식별되는 네트워크 인터페이스로부터 멀티캐스트 그룹 234.3.2.1로 데이터그램을 받지 못했기에 데이터를 아직 기다립니다. (글쎄, 우리는 이 데모에서 우리는 절대 그 그룹에 데이터그램을 보내지 않는다는 점에 주의해야 합니다.)

`brooklyn@bushwick:~$ python mcastrecv.py 192.168.56.105 234.3.2.1 50001

하지만, scrapy3midwood에서 mcastsend.py에 의해 보내진 패킷을 캡쳐했습니다.

>>> packets = sniff(prn=lambda p: p.summary(), filter='udp port 50001')
Ether / IP / UDP 192.168.56.103:52582 > 224.1.1.5:50001 / Raw / Padding

^C>>> hexdump(packets[0])
0000  01005E010105080027A133B408004500 ..^.....'.3...E.
0010  00290DC74000011191E7C0A83867E001 .)..@.......8g..
0020  0105CD66C351001553C948656C6C6F2C ...f.Q..S.Hello,
0030  20576F726C64210000000000          World!.....
>>>

연습과 탐색

다음 시나리오를 고려해 보겠습니다. 우리는 모든 네트워크 인터페이스로부터 멀티캐스트 데이터그램을 수신하기를 원합니다. socket.INADDR_ANY는 모든 주소를 나타뱀을 관찰할 수 있습니다. 우리는 mcastrecv.py의 간단한 수정으로 이 목표를 달성할 수 있다고 가정합다. 수정은

if fromnicip == '0.0.0.0':
        mreq = struct.pack("=4sl", socket.inet_aton(mcgrpip), socket.INADDR_ANY)
else:
        mreq = struct.pack("=4s4s", \
                socket.inet_aton(mcgrpip), socket.inet_aton(fromnicip))
receiver.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)

에서 다음으로 대체합니다.

mreq = struct.pack("=4sl", socket.inet_aton(mcgrpip), socket.INADDR_ANY)

우리는 eastny 또는 flatbuash에서 다음처럼 수정된 mcastrecv.py를 실행합니다.

brooklyn@flatbush:~$ python mcastrecv.py 192.168.56.104 224.1.1.5 50001

우리는 midwood에서 mcastsend.py를 실행합니다.

brooklyn@midwood:~$ python mcastsend.py 192.168.56.103 224.1.1.5 50001 "Hello, World!"

우리는 mcastsend가 완료할 동안 mcastrecv.py가 데이터를 아직 기다리고 있음을 관찰할 수 있습니다. scapy3를 사용하여 패킷을 캡처하고 캡처된 패킷을 사용하여 현상을 설명하는 실험을 설계합니다.

관련글

반응형
반응형

출처 : https://stackoverflow.com/questions/31166594/socket-python-recvfrom

소켓 파이썬 : recvfrom

저는 파이썬의 socket.recvfrom이 blocking 함수인지 알고 싶습니다. 그렇지 않다면 문서에서 답변을 찾을 수 없었습니다. 수신 받은 게 없다면 무엇이 리턴되나요? 빈 문자열 '' 인가요? 다른 경우, 사실 blocking이라면 이를 unblocking 함수로 어떻게 변경할 수 있나요? 저는 settimeout에 관해 들었지만 이것이 올바른 해결책인지는 모르겠습니다.

1개의 답변

기본적으로 그것은 blocking입니다. socket.setblocking(0) 또는 (같은 의미인) socket.settimeout(0)을 통해 non-blocking으로 바뀔 수 있습니다. 이 경우 받은 패킷이 없다면 socket.error 예외가 발생합니다.
다음 문서를 확인하세요.

https://docs.python.org/ko/3/library/socket.html#socket.socket.setblocking

반응형
반응형

출처 : https://stackoverflow.com/questions/33114855/reset-sequence-number-in-quickfix

quickfix에서 시퀀스 번호 리셋

나는 매주의 시작을 제외하고 로그온 시 시퀀스 번호를 리셋하지 않도록 브로커로 작업하고 있습니다. 그러나 시퀀스 번호가 이상하면 로그온 메시지의 태그 141을 사용하여 시퀀스 번호 리셋을 요청해야 합니다. 분명히 시퀀스 번호가 너무 낮아 거부된 로그온이 거부되었는지 확인하고 onlogon에 태그를 설정할 수 있습니다. 그러나 quickfix에 시퀀스 번호를 리셋해야 한다고 어떻게 알릴 수 있습니까? 이것은 시퀀스 번호에 영향을 미치는 연결 문제가 자주 발생하지 않기 때문에 테스트하기 어려운 기능입니다.

저는 quickfix의 C++ 버전을 사용합니다


1개의 답변

당신은 LOGOUT 메세지에서 적절한 메세지를 모니터해야 합니다. "msgseqnum이 너무 작다" 같은 뭔가가 발생하면, 다음 LOGON 메세지에서 리셋하도록 플래그를 설정해야 합니다. 이는 FIX::Application::fromAdmin 구현에서 합니다.

그리고 나서 당신의 FIX::Application::toAdmin 구현에서 메세지에 LOGON이 있는지 확인하고 리셋 플래그를 설정합니다. 그렇다면 당신의 세션(FIX::Session::lookupSession)을 찾아 setNextSenderMsgSeqNum(1)setNextTargetMsgSeqNum(1)를 호출합니다. 또한 당신의 플래그를 리셋합니다 :)

반응형
반응형

출처 : https://stackoverflow.com/questions/843277/how-do-i-check-if-a-variable-exists

어떻게 변수가 존재하는 지 체크하나요?

저는 변수가 존재하는 지 체크하기를 원합니다. 이제 저는 다음처럼 뭔가 하였습니다.

try:
   myVar
except NameError:
   # 뭔가 하기

예외처리 없이 다른 방법이 있을까요?


14개의 답변 중 1개

지역 변수의 존재를 체크하려면

if 'myVar' in locals():
  # myVar 있음

전역 변수의 존재를 체크하려면

if 'myVar' in globals():
  # myVar 있음

객체에 속성이 있는지 체크하려면

if hasattr(obj, 'attr_name'):
  # 객체.속성이름(obj.attr_name) 있음
반응형
반응형

출처 : https://stackoverflow.com/questions/32613375/python-2-7-exception-handling-syntax

파이썬 2.7 예외 처리 구문

파이썬 2.7에서 try exception 사용에 관해 좀 혼란스럽습니다.

try:
    raise valueError("sample value error")
except Exception as e:
    print str(e)    

try:
    raise valueError("sample value error")
except Exception,exception:
    print str(exception)


try:
    raise valueError("sample value error")
except exception:
    print str(exception)


try:
    raise valueError("sample value error")
except Exception:
    print str(Exception) # 이는 객체 참조만 출력합니다.

위의 예시를 이해할 수 있도록 저에게 설명해주실 수 있나요?


4 개의 답변 중 1개의 답변

except 변형의 다른 변형 간의 차이점을 이해하는 데 도움이 되는 몇 가지 개념:

  • except Exception, eexcept Exception as e과 유사하게 더 이상 사용되지 않는 오래된 변형
  • except Exception as e - Exception(또는 모든 하위 클래스)의 예외를 catch하고 추가 처리, 메시징 또는 이와 유사한 것을 e 변수에 저장합니다.
  • except ExceptionException 타입(또는 모든 하위 클래스)의 예외를 catch하지만 예외에 제공된 값/정보는 무시합니다.
  • except e – 컴파일 오류가 발생합니다. 이것이 파이썬 버전과 관련이 있는지 확실하지 않지만 그렇다면 예외 유형에 신경 쓰지 않고 해당 정보에 액세스하려는 것을 의미해야 합니다.
  • except – 어떤 예외도 포착하고 예외 정보를 무시합니다.

무엇을 사용할지는 많은 요인에 따라 다르지만 예외에 제공된 정보가 필요하지 않은 경우 이 정보를 포착하기 위해 변수를 제시할 필요가 없습니다.

catch할 Exception 타입과 관련하여 정확한 유형의 예외를 포착하도록 주의하십시오. 일반적인 모든 예외의 catch를 작성하는 경우 except Exception을 사용하는 것이 정확할 수 있지만 귀하가 제공한 예제의 경우 실제로 except ValueError 오류를 직접 사용하도록 선택할 것입니다. 이렇게 하면 잠재적으로 다른 예외가 코드의 다른 수준에서 적절하게 처리될 수 있습니다. 요점은 처리할 준비가 되지 않은 예외를 catch하지 마십시오.

원하는 경우 공식 문서에서 python 2.7 예외 처리 또는 사용 가능한 python 2.7 예외에 대해 자세히 읽을 수 있습니다.

반응형
반응형

출처 : https://stackoverflow.com/questions/24157767/how-to-logout-fix-session

fix 세션을 로그아웃하는 방법?

저는 quickfixj를 사용하고 있습니다. 저는 "EndTrade" 같은 사용자 정의 메세지가 있고 그 메세지를 받을 때 fix session을 종료하고 싶습니다? 어떻게 할 수 있을까요? 저는 그것을 할 수 있는 방법을 찾을 수 없었습니다. new Session().logout()을 사용하는 것은 안 됩니다.


1개의 답변

제 질문의 답변을 얻었습니다. 당신은 다음 방법으로 fix session을 로그아웃 할 수 있습니다.

Session.lookupSession(sessionID).logout();
반응형

+ Recent posts