Eu preciso de uma maneira de dizer em que modo o shell está dentro do shell.
Eu tentei olhar para o módulo da plataforma , mas parece apenas falar sobre "sobre a arquitetura de bits e o formato de ligação usado para o executável": o binário é compilado como 64 bits (estou executando o OS X 10.6), portanto parece sempre relatar 64 bits, embora eu esteja usando os métodos descritos aqui para forçar o modo de 32 bits).
Respostas:
Uma maneira é olhar
sys.maxsize
como documentado aqui :sys.maxsize
foi introduzido no Python 2.6. Se você precisar de um teste para sistemas mais antigos, esse teste um pouco mais complicado deverá funcionar em todas as versões do Python 2 e 3:BTW, você pode ser tentado a usar
platform.architecture()
para isso. Infelizmente, os resultados nem sempre são confiáveis, particularmente no caso de binários universais OS X .fonte
sys.maxsize
teste para Python 2.6+ eostruct
teste usado peloplatform
módulo que também funciona para versões mais antigas do Python 2.Ao iniciar o interpretador Python no terminal / linha de comando, você também pode ver uma linha como:
Python 2.7.2 (default, Jun 12 2011, 14:24:46) [MSC v.1500 64 bit (AMD64)] on win32
Onde
[MSC v.1500 64 bit (AMD64)]
significa Python de 64 bits. Funciona para minha configuração específica.fonte
[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
. Eu recebo por exemplo('3.4.4 |Continuum Analytics, Inc.| (default, Feb 16 2016, 09:54:04) [MSC ' 'v.1600 64 bit (AMD64)]')
ou2.7.5 (default, May 15 2013, 22:43:36) [MSC v.1500 32 bit (Intel)]
Basicamente, uma variante da resposta de Matthew Marshall (com struct da biblioteca std.library):
fonte
python -c "import struct; print(struct.calcsize('P')*8)"
Tente usar ctypes para obter o tamanho de um ponteiro nulo:
Serão 4 para 32 bits ou 8 para 64 bits.
fonte
python -c 'import ctypes; print ctypes.sizeof(ctypes.c_voidp)'
retorna 8 . Ou deveria serpython -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')"
Console python aberto:
deve exibir '64 bits' ou '32 bits' de acordo com a sua plataforma.
Como alternativa ( no caso de binários do OS X ):
fonte
Para uma solução não programática, procure no Monitor de Atividade. Ele lista a arquitetura dos processos de 64 bits como "Intel (64 bits)".
fonte
No meu sistema Centos Linux, fiz o seguinte:
1) Iniciei o interpretador Python (estou usando o 2.6.6)
2) Execute o seguinte código:
e isso me deu
fonte
platform.architecture()
as notas dizem:fonte
Agrupando tudo ...
Considerando que:
Vou exemplificar nas três plataformas, usando Python 3 e Python 2 .
0x100000000
(2 ** 32
): maior para 64 bits , menor para 32 bits :sizeof(void*)
):sizeof(void*)
). Como uma observação, ctypes usa # 2. (não necessariamente para esta tarefa) via "$ {PYTHON_SRC_DIR} / Lib / ctypes / __ init__.py" (na linha 15 ):Vitória específica:
fonte
struct.calcsize("P")
retorna o tamanho dos bytes necessários para armazenar um único ponteiro. Em um sistema de 32 bits, ele retornaria 4 bytes. Em um sistema de 64 bits, ele retornaria 8 bytes.Portanto, o seguinte retornaria
32
se você estiver executando o python de 32 bits e64
se estiver executando o python de 64 bits:Python 2
Python 3
fonte
Faça um
python -VV
na linha de comando. Deve retornar a versão.fonte
depois de bater python no cmd
fonte
3.5.1 (v3.5.1: 37a07cee5969, 6 de dezembro de 2015, 01:54:25) [MSC v.1900 de 64 bits (AMD64) ]
fonte
Com base na resposta de abe32,
Os n_bits terão 32 ou 64 bits.
fonte
Para 32 bits retornará 32 e para 64 bits retornará 64
fonte
Arquitetura de plataforma não é a maneira confiável. Em vez disso nós:
fonte
platform.architecture()
é problemático (e caro).Teste convenientemente
sys.maxsize > 2**32
desde o Py2.6.Este é um teste fiável para o (padrão) tamanho real ponteiro e compatível, pelo menos, uma vez que Py2.3:
struct.calcsize('P') == 8
. Também:ctypes.sizeof(ctypes.c_void_p) == 8
.Notas: Pode haver compilações com a opção gcc
-mx32
ou mais, que são aplicativos de arquitetura de 64 bits, mas usam ponteiros de 32 bits como padrão (economizando memória e velocidade). 'sys.maxsize = ssize_t' pode não representar estritamente o tamanho do ponteiro C (geralmente é2**31 - 1
assim mesmo). E havia / existem sistemas que têm tamanhos de ponteiro diferentes para código e dados e precisa ser esclarecido qual é exatamente o objetivo de discernir o "modo 32 bits ou 64 bits"?fonte