AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 1243551
Accepted
Lexible
Lexible
Asked: 2020-05-26 07:49:05 +0800 CST2020-05-26 07:49:05 +0800 CST 2020-05-26 07:49:05 +0800 CST

Os scripts do Python 3.8 de repente não serão executados, mas os comandos do Python funcionam bem quando invocados diretamente

  • 772

Estou totalmente perplexo e mistificado. Estou felizmente codificando e executando scripts Python a partir do terminal (e também executando o interpretador Python). Fui para a cama como um feliz usuário de Python, mas de repente não consigo executar nenhum script Python a partir do shell.

hello.pycontém:

#!/usr/bin/python3
print('Hello world!')

Mas de repente :

% ./hello.py
./hello.py: 1: #!/usr/bin/python3: not found
./hello.py: 2: Syntax error: word unexpected (expecting ")")

Mas

% python3 hello.py 
Hello world!
% python hello.py 
Hello world!

O que. O. Zarking. Fardwarks.


ls -la hello.pymostra:

-rwxrwxr-x 1 Lexible Lexible    44 May 25 08:35  hello.py

Por dois pedidos de @Kulfy

% file -k hello.py 
hello.py: Python script text executable\012- a /usr/bin/python3 script, UTF-8 Unicode (with BOM) text executable

% cat -e  hello.py
M-oM-;M-?#!/usr/bin/python3$
print('Hello world!')$

ls -la /usr/bin/python3*mostra:

lrwxrwxrwx 1 root root       9 Mar 13 05:20 /usr/bin/python3 -> python3.8
-rwxr-xr-x 1 root root 5457536 Apr 27 08:53 /usr/bin/python3.8
lrwxrwxrwx 1 root root      33 Apr 27 08:53 /usr/bin/python3.8-config -> x86_64-linux-gnu-python3.8-config
lrwxrwxrwx 1 root root      16 Mar 13 05:20 /usr/bin/python3-config -> python3.8-config
-rwxr-xr-x 1 root root     384 Mar 27 19:39 /usr/bin/python3-futurize
-rwxr-xr-x 1 root root     388 Mar 27 19:39 /usr/bin/python3-pasteurize

Para risos...

% which python
/usr/bin/python
% which python3
/usr/bin/python3

Até...

% python3
Python 3.8.2 (default, Apr 27 2020, 15:53:34) 
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print('Hello world!')
Hello world!
>>>

PS: Estou usando o Ubuntu 20.04 (Focal Fossa). Já tentei reiniciar e sudo apt install -f --reinstall python3 python3.8 python3-minimal python3.8-minimal libpython3.8-minimaltudo sem sucesso.

scripts python3
  • 2 2 respostas
  • 13369 Views

2 respostas

  • Voted
  1. Best Answer
    Kulfy
    2020-05-26T08:51:59+08:002020-05-26T08:51:59+08:00

    Como você pode executar o script usando python3 hello.py, é evidente que o problema não está na instalação do Python ou nos links simbólicos. Em vez disso, o problema é com o próprio script.

    O shell (aqui, zsh) realmente não reconheceu o shebang como tal por causa de alguns personagens alienígenas antes #. Ele tentou executar todo o script com o shell/interpretador padrão, produzindo erros.

    Você pode usar a -eopção de catpara verificar o conteúdo real do script. -eé basicamente a combinação de ve E. vusa ^e M-notação, e é Eexibido $no final de cada linha.

    Depois de observar a saída de cat -e hello.py, parece que o script contém uma marca de ordem de byte perto de seu shebang/hashbang que pode ter sido inserida por algum software do Windows. Isso impediu que o script realmente carregasse o interpretador Python, então ele foi executado pelo zsh, causando o erro.

    Você pode remover BOMs e outros caracteres específicos do DOS usando dos2unix.

    dos2unix hello.py  # Install using `sudo apt install dos2unix` (if not already installed)
    

    dos2unixirá cuidar de todos os caracteres/terminações de linha do tipo Windows/DOS e convertê-los para os do tipo Unix.

    Ou você também pode usar sedpara remover BOMs. Como as BOMs estavam presentes em UTF-8, sua representação hexadecimal é EF BB BF.

    sed -i '1s/^\xEF\xBB\xBF//' hello.py
    
    • 49
  2. Lexible
    2020-05-26T08:52:41+08:002020-05-26T08:52:41+08:00

    Com a ajuda graciosa de @Kulfy, o problema parece ser alguns bytes não renderizáveis ​​que precedem o shebang em meus scripts! Especificamente, os bytes EF BB BFprecediam os bytes 23 21que deveriam ser o início do(s) script(s).

    Como essa marca de ordem de byte chegou lá é um mistério, mas pelo menos agora:

    ./hello.py
    Hello world!
    
    • 8

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve