Existe alguma maneira curta de conseguir o que a interface da linha de comando do APT ( Advanced Package Tool ) faz no Python?
Quero dizer, quando o gerenciador de pacotes solicita uma pergunta de sim / não seguida por [Yes/no]
, o script aceita YES/Y/yes/y
ou Enter(o padrão Yes
é sugerido pela letra maiúscula).
A única coisa que encontro nos documentos oficiais é input
e raw_input
...
Eu sei que não é tão difícil de emular, mas é irritante reescrever: |
raw_input()
é chamadoinput()
.Respostas:
Como você mencionou, a maneira mais fácil é usar
raw_input()
(ou simplesmenteinput()
para Python 3 ). Não há uma maneira integrada de fazer isso. Da receita 577058 :Exemplo de uso:
fonte
elif choice in valid:
E eu provavelmente retornaria um booleano.raw_input()
é chamadoinput()
em Python3raw_input()
porinput()
para Python3.Eu faria assim:
fonte
raw_input()
é chamadoinput()
em Python3Há uma função
strtobool
na biblioteca padrão do Python: http://docs.python.org/2/distutils/apiref.html?highlight=distutils.util#distutils.util.strtoboolVocê pode usá-lo para verificar a entrada do usuário e transformá-lo em
True
ouFalse
valor.fonte
f
provavelmente significa False eFalse == 0
, portanto, entendi a lógica. Por que a função retornaria um emint
vez de abool
é um mistério para mim.False
ou0
(Zero). Qualquer coisa, outra coisa que é avaliada usando a função bool torna-se verdadeira e vai voltar:1
.if strtobool(string) is False: do_stuff()
.Uma maneira muito simples (mas não muito sofisticada) de fazer isso para uma única escolha seria:
Você também pode escrever uma função simples (um pouco aprimorada) em torno disso:
Nota: No Python 2, use em
raw_input
vez deinput
.fonte
result = raw_input("message").lower() in ('y','yes')
Você pode usar o método do clique
confirm
.Isso imprimirá:
Deve funcionar para
Python 2/3
Linux, Mac ou Windows.Documentos: http://click.pocoo.org/5/prompts/#confirmation-prompts
fonte
como mencionado por @Alexander Artemenko, aqui está uma solução simples usando o strtobool
fonte
sys.stdout.write
vez deprint
?strtobool()
(dos meus testes) não requer alower()
. Isso não está explícito em sua documentação, no entanto.Eu sei que isso foi respondido de várias maneiras e isso pode não responder à pergunta específica do OP (com a lista de critérios), mas foi o que fiz no caso de uso mais comum e é muito mais simples do que as outras respostas:
fonte
raw_input
foi renomeadoinput
no python 3 stackoverflow.com/questions/21122540/…Você também pode usar o prompter .
Desavergonhadamente retirado do README:
fonte
Eu modifiquei a resposta da fmark para por python 2/3 compatível com mais python.
Consulte o módulo utilitário do ipython se você estiver interessado em algo com mais manipulação de erros
fonte
no 2.7, isso é não-pitônico demais?
captura qualquer variação de Sim pelo menos.
fonte
Fazendo o mesmo com o python 3.x, onde
raw_input()
não existe:fonte
Para Python 3, estou usando esta função:
A função strtobool converte uma string em um bool. Se a string não puder ser analisada, ela gerará um ValueError.
No Python 3, raw_input foi renomeado para input .
fonte
Você pode tentar algo como o código abaixo para poder trabalhar com opções da variável 'aceito' exibida aqui:
Aqui está o código ..
fonte
Como noob de programação, achei um monte de respostas acima muito complexas, especialmente se o objetivo é ter uma função simples para a qual você pode passar várias perguntas de sim / não, forçando o usuário a selecionar sim ou não. Depois de vasculhar esta página e várias outras e emprestar todas as várias boas idéias, acabei com o seguinte:
fonte
Que tal agora:
fonte
Isto é o que eu uso:
fonte
É assim que eu faria.
Resultado
fonte
Aqui está minha opinião: eu simplesmente queria abortar se o usuário não afirmasse a ação.
fonte
Um exemplo limpo de Python 3:
fonte