0x23 In Binary Option


É possível ler stdin como dados binários em Python 2.6 Se sim, como eu vejo na documentação do Python 3.1 que isso é bastante simples, mas as facilidades para fazer isso em 2.6 não parecem estar lá. Se os métodos descritos em 3.1 não estão disponíveis, existe uma maneira de fechar stdin e reabrir em modo binário Apenas para ser claro, estou usando o tipo em um shell do MS-DOS para canalizar o conteúdo de um arquivo binário para o meu código python. Isso deve ser o equivalente a um comando Unix cat, tanto quanto eu entendo. Mas quando eu testar isso, eu sempre obter um byte menor do que o tamanho do arquivo esperado. Primeiro, obrigado por todas as respostas. Estou trabalhando lentamente para uma solução real, utilizável aqui. No final, eu ainda estou tentando construir um arquivo JAR auto-contido que executa meu código Python passando automaticamente por todos os argumentos de linha de comando não contaminados. A razão pela qual estou indo para a rota Java / JAR / Jython é porque uma das minhas principais bibliotecas externas está disponível apenas como um Java JAR. Mas, infelizmente, eu tinha começado meu trabalho como Python. Poderia ter sido mais fácil converter o meu código para Java há um tempo, mas uma vez que este material era suposto ser compatível, eu pensei que eu iria tentar transportar por ele e provar que poderia ser feito. No caso de alguém estava se perguntando, isso também está relacionado com a pergunta que eu perguntei há alguns dias. Alguma dessa pergunta foi respondida nesta pergunta. Então vou tentar atualizar minha pergunta original com algumas anotações sobre o que eu descobri até agora. Thebeav: Curiosamente, isso não funciona no meu sistema. Eu não sei se isso é porque I39m usando CPython em vez de Jython, ou se é porque I39m executando o Windows XP Pro e quottypequot se comporta de forma diferente, ou porque há uma anomalia magnética na área de Manassas que faz computadores fazer coisas diferentes. FWIW, eu tentei um número de maneiras de obter Python para alterar o modo de arquivo após o intérprete tinha começado, incluindo o acesso à função C runtime39s quotsetmodequot via ctypes. Nada funciona para mim. Ndash Dan Menes May 17 10 at 20:27 A partir dos documentos (ver aqui): Os fluxos padrão estão no modo de texto por padrão. Para escrever ou ler dados binários para estes, use o buffer binário subjacente. Por exemplo, para escrever bytes em stdout, use sys. stdout. buffer. write (babc). Mas, como na resposta aceita, invocar python com um - u é outra opção que força stdin, stdout e stderr a ser totalmente unbuffered. Consulte a página de manual python (1) para obter detalhes. Consulte a documentação do io para obter mais informações sobre o buffer de texto e use sys. stdin. detach () para desabilitar o buffering dentro do Python. Respondeu Jan 31 11 às 10:26 que doc leva a docs py3k, não o que o OP quer lidar. Ndash K.-Michael Aye Oct 16 12 at 17:48 Eu tentei - u com Python v3.2.5 mas não fez nada útil. Mas usando sys. stdout. buffer funciona muito bem embora em Python 2.7.8 não há tal recurso. Ndash ony 2 Sep 14 em 7:02 Se você ainda precisa disso. Este teste simples ive usado para ler o arquivo binário que contém 0x1A caracteres entre os meus dados de arquivo de teste foi: Sem configuração stdin para modo binário este teste imprime 1 assim que trata 0x1A como EOF. É claro que funciona apenas no Windows, porque depende do módulo msvcrt. Uma boa opção para criar strings com dados binários para salvar (por exemplo, salvar uma instrução sql em um arquivo) em arquivos de texto ou código php é fazer o seguinte: ltphp field Campo bin2hex (campo) campo chunksplit (campo 2.x) x. Substr (field, 0, - 2) gt isso irá converter seu campo (binário ou não) em hexadecimal e então converter o hex em uma string que pode ser colocada em um arquivo php: FFFFFFFF - gt xFFxFFxFFxFF Em resposta a Patrik: Maneira de imprimir um número em binário é usar baseconvert (). Lt echo baseconvert (bin, 10, 2) gt Se você precisar dele para imprimir todos os 32 bits (como sua função faz) você pode apenas pad it out: lt eco balcão (baseconvert (bin, 10, 2), 32, STRPADLEFT) gt A conversão é a partir da base 10 porque quando bin é passado para baseconvert (), ele é convertido em uma seqüência de caracteres, ea representação padrão é em decimal. Espero que isto ajude. Alguns deram uma função para converter um código hexadecimal de volta em um texto simples (legível por humanos ASCII: P) Mais alguém deu uma função que faz uso de bin2hex para converter URLs em algo como 123456 Aqui está uma função para ir do formulário 123456 de volta em ASCII Observe que esta função pode ser facilmente alterada para transformar qualquer código hexadecimal em ASCII lt função hex2text (str) str explode (, str) arrayshift (str) nmlstr foreach (str como hexstr) nmlstr. Chr (baseconvert (hexstr, 16, 10)) return nmlstr gt espero que isso ajude :) Saudações - Tsuna Espero que isso ajude alguém. Ele apenas exibe uma representação html de dados hexadecimais, bem como um visualizador hexadecimal. Ltplp função hexview (dados) bytePosition columnCount lineCount 0 colunas 8 dataLength strlen (dados) return array () return lttable border1 cellspacing0 cellpadding2gt para (n 0 n lt dataLength n) linhas lineCount columnCount substr (dados n. ) LineCount columnCount 0 foreach (linhas como linha) return lttrgtlttd alignrightgt. BytePosition. : Lt / tdgt para (n 0 n lt colunas n) return lttdgt. Strtoupper (bin2hex (linha n)). Lt / tdgt retorna lttdgt ampnbspampnbspampnbspampnbspampnbspampnbspampnbspampnbsp lt / tdgt para (n 0 n lt colunas n) return lttdgt. (Htmlentities (linha n). Htmlentities (linha n). Ampnbsp). Lt / tdgt retorna lt / trgt bytePosition bytePosition colunas retornam lt / tablegt return implode (return) gt Esta função o desfaz (converte novamente em ASCII). Ltphp função hex2asc (myin) para (i 0 i lt strlen (myin) / 2 i) myout. Chr (basconvert (substr (myin. I 2. 2), 16. 10)) return myout gt Eu estava apenas navegando o acima e com uma pequena modificação, veio com o seguinte que eu acredito ser mais flexível: ltphp função bin2hex (Dados) corrigidos eregreplace (0-9a-fA-F. Dados) pacote de retorno (H. strlen (corrigido), corrigido) gt Isso fará com que tudo o que você passar, mesmo se for preenchido nas extremidades ou entre pares , Deve retornar o data. Update desejado: quotnobody cuidou no Toshiba Satellite A100 De: M. Vefa Bicakci Data: Dom Nov 02 2008 - 15:48:27 EST Stefan Assmann escreveu: gt Para obter mais informações, tenho mais algumas coisas para Sugerir: Lamento não ter deixado você saber dos resultados de meus testes até agora. Como você sabe, este problema não é previsível, e eu tenho que esperar um longo tempo ou reiniciar várias vezes antes que eu possa obter uma mensagem quotnobody caredquot. O conteúdo deste e-mail não foi escrito em ordem cronológica. Tentei suas sugestões na seguinte ordem: terceiro, primeiro e segundo. Gt 1. Experimente a opção noapic Com a opção quotnoapicquot, há ainda outro problema imprevisível. Às vezes, inicializar com a opção quotnoapicquot está bem, enquanto que às vezes faz com que quotnobody caredquot mensagens para obter impressos após a fase initramfs. Com a opção quotnoapicquot, o IRQ problemático mudou de 18 para 11 e, por vezes, 10. Eu não testei um kernel com a opção quotnoapicquot o suficiente para ver se uma mensagem quotnobody careedquot iria aparecer horas ou dias após o computador inicializar. Aqui estão três exemplos comuns: O seguinte é do kernel do Siduxs: 8lt irq 11: ninguém se importou (tente inicializar com a opção quotirqpollquot) Pid: 1598, comm: modprobe Não manchado 2.6.27-4.slh.2-sidux-686 1 ltc016d514gt reportbadirq0x24 / 0x90 ltc016d802gt noteinterrupt0x282 / 0x2c0 ltc016cb40gt handleIRQevent0x30 / 0x60 ltc016e073gt handlelevelirq0xd3 / 0x100 ltc010717bgt doIRQ0x3b / 0x70 ltc01327adgt irqexit0x5d / 0x90 ltc01149b5gt smpapictimerinterrupt0x55 / 0x80 ltc0104993gt commoninterrupt0x23 / 0x28 ltc03500d8gt pciite887xexit0x8 / 0x42 ltc016cb20gt handleIRQevent0x10 / 0x60 ltc016e01dgt handlelevelirq0x7d / 0x100 ltc010717bgt doIRQ0x3b / 0x70 ltc016d2a1gt setupirq0x121 / 0x250 ltc0104993gt commoninterrupt0x23 / 0x28 ltc016007bgt proccpusetshow0x9b / 0xC0 ltf8bb88ccgt yentaprobecbirq0x9c / 0x110 yentasocket ltf8bb8c58gt ti12xxoverride0x238 / 0x6a0 yentasocket ltf8bba04agt yentaprobe0x62a / 0x67b yentasocket ltc01f0d62gt sysfsaddone0x12 / 0x50 ltc01f0e0dgt sysfsaddrmstart0x6d / 0xC0 ltc03592b5gt spinunlock0x5 / 0x20 ltc0246290gt pcimatchdevice0xa0 / 0xC0 ltc0246a66gt pcideviceprobe0x56 / 0x80 ltc02ace16gt driverprobedevice0x86 / 0x1a0 ltc0358ea4gt spinlockirqsave0x34 / 0x50 ltc02acfa1gt driverattach0x71 / 0x80 ltc02469b0gt pcideviceremove0x0 / 0x40 ltc02ac744gt busforeachdev0x44 / 0x70 ltc02469b0gt pcideviceremove0x0 / 0x40 ltc02acca6gt driverattach0x16 / 0x20 ltc02acf30gt driverattach0x0 / 0x80 ltc02ac107gt busadddriver0x1a7 / 0x220 ltc02469b0gt pcideviceremove0x0 / 0x40 ltc02ad13cgt driverregister0x5c / 0x130 ltf8b81000gt yentasocketinit0x0 / 0x14 yentasocket ltc0246ca7gt pciregisterdriver0x47 / 0x90 ltf8b81000gt yentasocketinit0x0 / 0x14 yentasocket ltc010111agt dooneinitcall0x2a / 0x160 ltc0125d6bgt checkpreemptwakeup0x11b / 0x160 ltc0127b9fgt trytowakeup0xbf / 0x190 ltc0154b8bgt sysinitmodule0x8b / 0x1b0 ltc0103eefgt sysenterdocall0x12 / 0x2f ltc0350000gt serial8250remove0x10 / 0x42 manipuladores: ltf8890820gt (usbhcdirq0x0 / 0x80 usbcore) ltf8890820gt (usbhcdirq0x0 / 0x80 usbcore) ltf8890820gt (usbhcdirq0x0 / 0x80 usbcore) Ltf8878b60gt (irqhandler0x0 / 0x490 firewireohci) Desabilitando o IRQ 11 gt8 O seguinte é de um kernel de baunilha não corrigido. Eu também tenho / proc / interrupts conteúdo e lsusb saída para este. Eu modifiquei /etc/rc. local para salvá-los no momento da inicialização. irq 8HL 11: ninguém se importava (tentar arrancar com a opção quotirqpollquot) Pid: 1616, comm: modprobe não contaminado 2.6.27.4 1 ltc016d484gt reportbadirq0x24 / 0x90 ltc016d772gt noteinterrupt0x282 / 0x2c0 ltc016cab0gt handleIRQevent0x30 / 0x60 ltc016dfe3gt handlelevelirq0xd3 / 0x100 ltc010717bgt doIRQ0x3b / 0x70 ltc013278dgt irqexit0x5d / 0x90 ltc01149b5gt smpapictimerinterrupt0x55 / 0x80 ltc0104993gt commoninterrupt0x23 / 0x28 ltc03500d8gt cpuid4cachelookup0x238 / 0x342 ltc016ca90gt handleIRQevent0x10 / 0x60 ltc016df8dgt handlelevelirq0x7d / 0x100 ltc010717bgt doIRQ0x3b / 0x70 ltc016d211gt setupirq0x121 / 0x250 ltc0104993gt commoninterrupt0x23 / 0x28 ltc016007bgt cpusetwrites640xb / 0xa0 ltf8ad28ccgt yentaprobecbirq0x9c / 0x110 yentasocket ltf8ad2c58gt ti12xxoverride0x238 / 0x6a0 yentasocket ltf8ad404agt yentaprobe0x62a / 0x67b yentasocket ltc01f0542gt sysfsaddone0x12 / 0x50 ltc01f05edgt sysfsaddrmstart0x6d / 0xC0 ltc0358ab5gt spinunlock0x5 / 0x20 ltc0245a80gt pcimatchdevice0xa0 / 0xC0 ltc0246256gt pcideviceprobe0x56 / 0x80 ltc02ac5b6gt driverprobedevice0x86 / 0x1a0 ltc03586a4gt spinlockirqsave0x34 / 0x50 ltc02ac741gt driverattach0x71 / 0x80 ltc02461a0gt pcideviceremove0x0 / 0x40 ltc02abee4gt busforeachdev0x44 / 0x70 ltc02461a0gt pcideviceremove0x0 / 0x40 ltc02ac446gt driverattach0x16 / 0x20 ltc02ac6d0gt driverattach0x0 / 0x80 ltc02ab8a7gt busadddriver0x1a7 / 0x220 ltc02461a0gt pcideviceremove0x0 / 0x40 ltc02ac8dcgt driverregister0x5c / 0x130 ltf89eb000gt yentasocketinit0x0 / 0x14 yentasocket ltc0246497gt pciregisterdriver0x47 / 0x90 ltf89eb000gt yentasocketinit0x0 / 0x14 yentasocket ltc010111agt dooneinitcall0x2a / 0x160 ltc0125d81gt checkpreemptwakeup0x131 / 0x160 ltc0154afbgt sysinitmodule0x8b / 0x1b0 ltc0103eefgt sysenterdocall0x12 / 0x2f ltc0350000gt cpuid4cachelookup0x160 / 0x342 manipuladores: ltf8890820gt (usbhcdirq0x0 / 0x80 usbcore) ltf8890820gt (usbhcdirq0x0 / 0x80 usbcore) ltf8890820gt (usbhcdirq0x0 / 0x80 usbcore) ltf8880b60gt (irqhandler0x0 / firewireohci 0x490) Desactivar IRQ 11 GT8 / proc / interrompe: 8HL CPU0 CPU1 0: 21711 0 XT-Pic - XT timer 1: 8 0 XT-PIC-XT i8042 2: 0 0 XT-PIC-XT cascata 3: 1 0 XT-PIC-XT 4: 1 0 XT-PIC-XT 5: 1 0 XT-PIC-XT 6 : 1 0 XT-PIC-XT 7: 1 0 XT-PIC-XT 8: 1 0 XT-PIC-XT rtc0 9: 92 0 XT-PIC-XT acpi 10: 872 0 XT-PIC-XT uhcihcd: usb3, uhcihcd: usb4, mmc0, yenta, HDA Intel, tifm7xx1, eth0 11: 100020 0 XT-PIC-XT uhcihcd: usb1, uhcihcd: usb2, ehcihcd: usb5, firewireohci 12: 132 0 XT-PIC-XT i8042 14: 5056 0 XT-PIC-XT atapiix 15: 243 0 XT-PIC-XT atapiix 220: 27 0 PCI-MSI-edge iwl3945 NMI: 0 0 Interrupções não-mascaráveis ​​LOC: 14292 21324 Interrupções de temporizador locais RES: 2321 5845 Reinicialização de interrupções CAL: 1296 1583 interrupções de chamadas de função TLB: 296 298 TLB derrubadas TRM: 0 0 Interrupções de eventos térmicos SPU: 0 0 Interrupções espúrias ERR: 0 MIS: 0 gt8 lsusb: 8lt Bus 005 Dispositivo 001: ID 1d6b: 001: ID 1d6b: 0001 Linux Foundation 1.1 raiz hub Bus 003 Dispositivo 002: ID 0d62: 0004 Darfon Electronics Corp. Filtro Driver Bus 003 Dispositivo 001: ID 1d6b: 0001 Linux Foundation 1.1 raiz hub Bus 002 Dispositivo 001: ID 1d6b: 0001 Linux Foundation 1.1 root hub 001 001 Device ID 001: ID 1d6b: 0001 Linux Foundation 1.1 raiz hub gt8 Há também IRQ 10, que às vezes fica desativado após IRQ 11 foi desativado por 15-30 segundos. Vale ressaltar que este kernel foi construído com o patch que você forneceu, mas com um 99 em vez do 999. Portanto, esta mensagem quotnobody caredquot poderia ser causada por 99s sendo muito pequeno. 8HL IRQ 10: ninguém se importava (tentar arrancar com a opção quotirqpollquot) Pid: 3920, comm: hal-system-mata não contaminado 2.6.27.4-spurious99 1 ltc016d484gt reportbadirq0x24 / 0x90 ltc016d76agt noteinterrupt0x27a / 0x2b0 ltc016cab0gt handleIRQevent0x30 / 0x60 ltc016dfd3gt handlelevelirq0xd3 / 0x100 ltc010717bgt doIRQ0x3b / 0x70 ltc013278dgt irqexit0x5d / 0x90 ltc01149b5gt smpapictimerinterrupt0x55 / 0x80 ltc0104993gt commoninterrupt0x23 / 0x28 ltc013249egt dosoftirq0x4e / 0xE0 ltc0132585gt dosoftirq0x55 / 0x60 ltc01327a5gt irqexit0x75 / 0x90 ltc0107180gt doIRQ0x40 / 0x70 ltc0104993gt commoninterrupt0x23 / 0x28 ltc019007bgt mprotectfixup0x1db / 0x420 ltc0189e08gt unmapvmas0x4a8 / ltc018db80gt 0x720 exitmmap0x90 / 0x130 ltc012ae5egt mmput0x1e / 0x90 ltc01a9e8dgt flusholdexec0x1ad / 0x700 ltc01aa46dgt kernelread0x3d / 0x60 ltc01d7f7egt loadelfbinary0x35e / 0x18f0 ltc01be896gt mntdropwrite0x56 / 0x130 ltc0358aa5gt spinunlock0x5 / 0x20 ltc017c1c3gt genericfileaioread0x5b3 / 0x6d0 ltc01a4d35gt dosyncread0xd5 / 0x120 ltc01bd738gt mntputnoexpire0x18 / 0x110 ltc0141980gt autoremovewakefunction0x0 / 0x50 ltc01a597bgt vfsread0xfb / 0x160 ltc01d7c20gt loadelfbinary0x0 / 0x18f0 ltc01a99dcgt searchbinaryhandler0x16c / 0x2d0 ltc01aa46dgt kernelread0x3d / 0x60 ltc01d67a6gt loadscript0x1f6 / 0x240 ltc018b214gt getuserpages0xe4 / 0x380 ltc0358694gt spinlockirqsave0x34 / 0x50 ltc0187efcgt setpageaddress0xbc / 0x190 ltc018809egt pageaddress0xce / 0xF0 ltc018809egt pageaddress0xce / 0xF0 ltc01d65b0gt loadscript0x0 / 0x240 ltc01a99dcgt searchbinaryhandler0x16c / 0x2d0 ltc01aacbbgt doexecve0x24b / 0x290 ltc0102316gt sysexecve0x46 / 0x80 ltc0103eefgt sysenterdocall0x12 / 0x2f ltc0350000gt cpuid4cachelookup0x170 / 0x342 manipuladores: ltf8890820gt (usbhcdirq0x0 / 0x80 usbcore) ltf887f940gt ltf8890820gt (usbhcdirq0x0 / 0x80 usbcore) ltf8afa8e0gt (yentainterrupt0x0 / 0xF0 yentasocket) ltf8b89640gt (tifm7xx1isr0x0 / tifm7xx1 0x140) ltf8cbe7a0gt (azxinterrupt0x0 / sndhdaintel 0x130) (sdhciirq0x0 / sdhci 0x610) ltf88e31a0gt (e100intr0x0 / 0xE0 e100) ltf8e6ea90gt (i915driverirqhandler0x0 / i915 0x230) Desactivar IRQ 10 GT8 gt 2. tentar a opção irqpoll eu compilei 2.6.27.4 com o patch de interrupção espúria que você forneceu, e eu ter arrancado com a opção irqpoll. Atualmente estou esperando por uma mensagem quotnobody caredquot. By the way, eu iria receber todas as mensagens do kernel se um dos IRQs não foi tratado corretamente e, portanto, a funcionalidade habilitada por quotirqpollquot foi usado gt 3. Experimente o mais recente 2.6.26 kernel para verificar isso foi introduzido com gt 2.6. 27 Eu fiz alguns testes com Siduxs 2.6.27-6.slh.4, vanilla 2.6.27.7 e vanilla 2.6.27.2, os dois últimos dos quais tinham uma versão modificada que o seu patch foi aplicado. A modificação foi a substituição de 99900 por 99 em vez dos 999 que você sugeriu em seu patch. Espero que isso não tenha causado falsos positivos. Eu não usei nenhuma opção de linha de comando do kernel. Versão: quotnobody caredquot 2.6.27.2 (baunilha, sem patch) Sim 2.6.26.7 (baunilha, com patch) Sim 2.6.26-6.slh.4 (Sidux, sem patch) Sim Heres a cronologia: Eu tentei pela primeira vez 2.6.27.2 Sem o patch. Recebi a mensagem quotnobody cuidada aproximadamente 3,5 horas após o boot. Por causa da relativa rapidez, eu não vi a necessidade de experimentá-lo com o patch. Eu tentei então 2.6.26.7 com o remendo, e eu comecei a mensagem quotnobody importada após 9.5 horas. Então eu queria ter certeza de que a minha mudança do 999 em 99 não causou um falso positivo. Eu tentei kernel Siduxs 2.6.26.6 baseado, não modificado - que é sem o patch aplicado. Recebi a mensagem quotnobody caredquot depois de aproximadamente três dias. Portanto, isso pode não ser regressão causada por 2.6.27 afinal. Antes de mudar para a série 2.6.27-rcX, usei o 2.6.25.X e usei para conectar meu teclado USB a uma das portas USB do lado direito do laptop. Durante o tempo do switch para 2.6.27-rcX, comecei a usar as portas USB no painel traseiro do laptop para reduzir a desordem do desktop, e comecei a receber a mensagem quotnobody caredquot. Não pensar sobre a possibilidade de port ou controlador questões específicas, eu pensei que isso poderia ser uma regressão. (Vou tentar 2.6.25.19 depois que eu fiz com 2.6.27.4 e irqpoll.) Existe alguma coisa que eu posso fazer para obter mais informações sobre esse problema Parece haver muitas variáveis ​​e comportamento imprevisível. Se você pudesse me fornecer um passo a passo método sistemático para depurar esse problema, eu realmente aprecio isso. Mais uma vez, muito obrigado pela sua ajuda. - Para cancelar a inscrição desta lista: envie a linha quotunsubscribe linux-kernelquot no corpo de uma mensagem para majordomoxxxxxxxxxxxxxxx Mais majordomo info em vger. kernel. org/majordomo-info. html Por favor, leia o FAQ em tux. org/lkml/

Comments