Czytam kod źródłowy testinfra
w module Ansible. Znalazłem następujące wiersze kodu:Kiedy chr (ord (c)) nie jest równy c w Pythonie?
# Ansible return an unicode object but this is bytes ...
# A simple test case is:
# >>> assert File("/bin/true").content == open("/bin/true").read()
stdout_bytes = b"".join((chr(ord(c)) for c in out['stdout']))
stderr_bytes = b"".join((chr(ord(c)) for c in out['stderr']))
To iteracje nad stdout
, dostaje porządkowa całkowitą każdego znaku i konwertuje go na ciąg znaków jeden. Ale o co chodzi?
Wersja w języku Python prawdopodobnie ma tutaj znaczenie. W Python2, ord przyjmuje znaki Unicode jako dane wejściowe, ale chr przechodzi tylko z int do ASCII, więc może być tam wykorzystanie jakiegoś dziwactwa? – JETM
Pomoże wskazać, gdzie w kodzie widziałeś tę linię. Nie możemy wiele zrobić bez kontekstu. Zakładam, że odnosisz się do kodu w module [Ansible] (https://github.com/philpep/testinfra/blob/55e4ed92db8cc9fe118fe3da465010169825b0d6/testinfra/backend/ansible.py#L40) ... komentarz tam mógł być przydatny. –
@JeffMercado Tak, jest w kodzie źródłowym ansibla. Czytałem komentarz, ale dlaczego autor korzysta z tego? Czy jest równe 'out ['stdout']. Encode ('ascii')'? – satoru