Мне нужен способ сказать, в каком режиме оболочка находится внутри оболочки.
Я попытался взглянуть на модуль платформы, но кажется, что он говорит только о «битовой архитектуре и формате связи, используемом для исполняемого файла»: хотя двоичный файл скомпилирован как 64-битный (я работаю на OS X 10.6), поэтому Кажется, он всегда сообщает о 64-битном, хотя я использую методы, описанные здесь, чтобы форсировать 32-битный режим).
Ответы:
Один из способов - посмотреть,
sys.maxsize
как описано здесь :sys.maxsize
был введен в Python 2.6. Если вам нужен тест для более старых систем, этот немного более сложный тест должен работать на всех выпусках Python 2 и 3:Кстати, вы могли бы испытать желание использовать
platform.architecture()
для этого. К сожалению, результаты не всегда надежны, особенно в случае OS X универсальных двоичных файлов .источник
sys.maxsize
изменил ответ, чтобы показать теперь документированный тест для Python 2.6+ иstruct
тест, используемыйplatform
модулем, который также работает для более старых версий Python 2.При запуске интерпретатора Python в терминале / командной строке вы также можете увидеть строку вроде:
Python 2.7.2 (default, Jun 12 2011, 14:24:46) [MSC v.1500 64 bit (AMD64)] on win32
Где
[MSC v.1500 64 bit (AMD64)]
означает 64-битный Python. Работает для моей конкретной настройки.источник
[MSC v.1500 64 bit (AMD64)]
Python 2.7.8 (v2.7.8:ee879c0ffa11, Jun 29, 2014, 21:07:35) [GCC 4.2.1 (Apple In. build 5666) (dot 3)] on darwin
Python 2.7.8 (default, Jul 25 2014, 14:04:36) [GCC 4.8.3] on cygwin
sys.version
. Я получаю, например,('3.4.4 |Continuum Analytics, Inc.| (default, Feb 16 2016, 09:54:04) [MSC ' 'v.1600 64 bit (AMD64)]')
или2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)]
В основном вариант ответа Мэтью Маршалла (со структурой из std.library):
источник
python -c "import struct; print(struct.calcsize('P')*8)"
Попробуйте использовать ctypes, чтобы получить размер пустого указателя:
Это будет 4 для 32 бит или 8 для 64 бит.
источник
python -c 'import ctypes; print ctypes.sizeof(ctypes.c_voidp)'
возвращается 8 . Или это должно бытьpython -c 'import ctypes; print ctypes.sizeof(ctypes.c_voidp) * 8'
?python -c "import ctypes; print(32 if ctypes.sizeof(ctypes.c_voidp)==4 else 64, 'bit CPU')"
Откройте консоль Python:
он должен отображать «64-битный» или «32-битный» в зависимости от вашей платформы.
Альтернативно ( в случае двоичных файлов OS X ):
источник
Для непрограммного решения, посмотрите в мониторе активности. В нем перечислены архитектуры 64-разрядных процессов как «Intel (64-разрядные)».
источник
В моей системе Centos Linux я сделал следующее:
1) Запустил интерпретатор Python (я использую 2.6.6)
2) Запустил следующий код:
и это дало мне
источник
platform.architecture()
заметки говорят:источник
Группируем все ...
Учитывая, что:
Я собираюсь привести примеры на всех 3 платформах, используя Python 3 и Python 2 .
0x100000000
(2 ** 32
): больше для 64- битного , меньше для 32-битного :sizeof(void*)
):sizeof(void*)
). Как примечание, ctypes использует # 2. (не обязательно для этой задачи) через "$ {PYTHON_SRC_DIR} / Lib / ctypes / __ init__.py" (около строки № 15 ):Выиграть конкретно:
источник
struct.calcsize("P")
возвращает размер байтов, необходимых для хранения одного указателя. В 32-битной системе он вернул бы 4 байта. В 64-битной системе он вернул бы 8 байтов.Поэтому следующее будет возвращаться,
32
если вы работаете с 32-битным питоном и64
если вы работаете с 64-битным питоном:Python 2
Python 3
источник
Сделайте
python -VV
в командной строке. Должен вернуть версию.источник
после удара питона в cmd
источник
3.5.1 (v3.5.1: 37a07cee5969, 6 декабря 2015, 01:54:25) [MSC v.1900 64 бит (AMD64) ]
источник
Основываясь на ответе abe32,
n_bits будет иметь 32 или 64 бита.
источник
Для 32-битной вернет 32, а для 64-битной вернет 64
источник
Архитектура платформы не является надежным способом. Вместо нас:
источник
platform.architecture()
проблематично (и дорого).Удобно проверить на
sys.maxsize > 2**32
начиная с Py2.6.Это надежный тест для фактического ( по умолчанию) размер указателя и совместим по крайней мере с Py2.3:
struct.calcsize('P') == 8
. Кроме того :ctypes.sizeof(ctypes.c_void_p) == 8
.Примечания: могут быть сборки с опцией gcc
-mx32
или около того, которые являются приложениями 64-битной архитектуры, но по умолчанию используют 32-битные указатели (экономия памяти и скорости). 'sys.maxsize = ssize_t' может не строго соответствовать размеру указателя C (обычно это так2**31 - 1
или иначе). И были / есть системы, которые имеют разные размеры указателя для кода и данных, и необходимо уточнить, что именно является целью определения "32-битного или 64-битного режима?"источник