reconoce pip3 paquetes mac librerias interno instalar externo descargar como comando python

pip3 - instalar pip python windows



Interfaz de línea de comando APT, como la entrada sí/no? (17)

¿Hay alguna manera de lograr lo que hace la interfaz de línea de comando APT ( Advanced Package Tool ) en Python?

Quiero decir, cuando el administrador de paquetes solicita una pregunta sí / no seguida de [Yes/no] , la secuencia de comandos acepta YES/Y/yes/y o Intro (por defecto es Yes como lo indica la letra mayúscula).

Lo único que encuentro en los documentos oficiales es input y raw_input ...

Sé que no es tan difícil de emular, pero es molesto reescribir: |


Aquí está mi opinión, simplemente quería abortar si el usuario no confirma la acción.

import distutils if unsafe_case: print(''Proceed with potentially unsafe thing? [y/n]'') while True: try: verify = distutils.util.strtobool(raw_input()) if not verify: raise SystemExit # Abort on user reject break except ValueError as err: print(''Please enter /'yes/' or /'no/''') # Try again print(''Continuing ...'') do_unsafe_thing()


Como mencionaste, la forma más fácil es usar raw_input() . No hay una forma incorporada de hacer esto. De la receta 577058 :

import sys def query_yes_no(question, default="yes"): """Ask a yes/no question via raw_input() and return their answer. "question" is a string that is presented to the user. "default" is the presumed answer if the user just hits <Enter>. It must be "yes" (the default), "no" or None (meaning an answer is required of the user). The "answer" return value is True for "yes" or False for "no". """ valid = {"yes": True, "y": True, "ye": True, "no": False, "n": False} if default is None: prompt = " [y/n] " elif default == "yes": prompt = " [Y/n] " elif default == "no": prompt = " [y/N] " else: raise ValueError("invalid default answer: ''%s''" % default) while True: sys.stdout.write(question + prompt) choice = raw_input().lower() if default is not None and choice == '''': return valid[default] elif choice in valid: return valid[choice] else: sys.stdout.write("Please respond with ''yes'' or ''no'' " "(or ''y'' or ''n'')./n")

Ejemplo de uso:

>>> query_yes_no("Is cabbage yummier than cauliflower?") Is cabbage yummier than cauliflower? [Y/n] oops Please respond with ''yes'' or ''no'' (or ''y'' or ''n''). Is cabbage yummier than cauliflower? [Y/n] [ENTER] >>> True >>> query_yes_no("Is cabbage yummier than cauliflower?", None) Is cabbage yummier than cauliflower? [y/n] [ENTER] Please respond with ''yes'' or ''no'' (or ''y'' or ''n''). Is cabbage yummier than cauliflower? [y/n] y >>> True


Esto es lo que uso:

import sys # cs = case sensitive # ys = whatever you want to be "yes" - string or tuple of strings # prompt(''promptString'') == 1: # only y # prompt(''promptString'',cs = 0) == 1: # y or Y # prompt(''promptString'',''Yes'') == 1: # only Yes # prompt(''promptString'',(''y'',''yes'')) == 1: # only y or yes # prompt(''promptString'',(''Y'',''Yes'')) == 1: # only Y or Yes # prompt(''promptString'',(''y'',''yes''),0) == 1: # Yes, YES, yes, y, Y etc. def prompt(ps,ys=''y'',cs=1): sys.stdout.write(ps) ii = raw_input() if cs == 0: ii = ii.lower() if type(ys) == tuple: for accept in ys: if cs == 0: accept = accept.lower() if ii == accept: return True else: if ii == ys: return True return False


Haciendo lo mismo con python 3.x, donde raw_input() no existe:

def ask(question, default = None): hasDefault = default is not None prompt = (question + " [" + ["y", "Y"][hasDefault and default] + "/" + ["n", "N"][hasDefault and not default] + "] ") while True: sys.stdout.write(prompt) choice = input().strip().lower() if choice == '''': if default is not None: return default else: if "yes".startswith(choice): return True if "no".startswith(choice): return False sys.stdout.write("Please respond with ''yes'' or ''no'' " "(or ''y'' or ''n'')./n")


Hay una función strtobool en la biblioteca estándar de Python: docs.python.org/2/distutils/…

Puede usarlo para verificar la entrada del usuario y transformarlo en valor True o False .


Lo haría de esta manera:

# raw_input returns the empty string for "enter" yes = {''yes'',''y'', ''ye'', ''''} no = {''no'',''n''} choice = raw_input().lower() if choice in yes: return True elif choice in no: return False else: sys.stdout.write("Please respond with ''yes'' or ''no''")


Modifiqué la respuesta de fmark por python 2/3 compatible más pythonic.

Vea el módulo de utilidad de ipython si está interesado en algo con más manejo de errores

# PY2/3 compatibility from __future__ import print_function # You could use the six package for this try: input_ = raw_input except NameError: input_ = input def query_yes_no(question, default=True): """Ask a yes/no question via standard input and return the answer. If invalid input is given, the user will be asked until they acutally give valid input. Args: question(str): A question that is presented to the user. default(bool|None): The default value when enter is pressed with no value. When None, there is no default value and the query will loop. Returns: A bool indicating whether user has entered yes or no. Side Effects: Blocks program execution until valid input(y/n) is given. """ yes_list = ["yes", "y"] no_list = ["no", "n"] default_dict = { # default => prompt default string None: "[y/n]", True: "[Y/n]", False: "[y/N]", } default_str = default_dict[default] prompt_str = "%s %s " % (question, default_str) while True: choice = input_(prompt_str).lower() if not choice and default is not None: return default if choice in yes_list: return True if choice in no_list: return False notification_str = "Please respond with ''y'' or ''n''" print(notification_str)


Para Python 3, estoy usando esta función:

def user_prompt(question:str): """ Prompts a Yes/No questions. """ import sys from distutils.util import strtobool while True: sys.stdout.write(question + " [y/n]: ") user_input = input().lower() try: result = strtobool(user_input) return result except ValueError: sys.stdout.write("Please use y/n or yes/no./n")

La función strtobool convierte una cadena en un bool. Si la cadena no se puede analizar, generará un ValueError.

En Python 3, raw_input ha sido renombrado como input .


Puede intentar algo como el siguiente código para poder trabajar con opciones de la variable ''aceptada'' que se muestra aquí:

print( ''accepted: {}''.format(accepted) ) # accepted: {''yes'': ['''', ''Yes'', ''yes'', ''YES'', ''y'', ''Y''], ''no'': [''No'', ''no'', ''NO'', ''n'', ''N'']}

Aquí está el código ...

#!/usr/bin/python3 def makeChoi(yeh, neh): accept = {} # for w in words: accept[''yes''] = [ '''', yeh, yeh.lower(), yeh.upper(), yeh.lower()[0], yeh.upper()[0] ] accept[''no''] = [ neh, neh.lower(), neh.upper(), neh.lower()[0], neh.upper()[0] ] return accept accepted = makeChoi(''Yes'', ''No'') def doYeh(): print(''Yeh! Let/'s do it.'') def doNeh(): print(''Neh! Let/'s not do it.'') choi = None while not choi: choi = input( ''Please choose: Y/n? '' ) if choi in accepted[''yes'']: choi = True doYeh() elif choi in accepted[''no'']: choi = True doNeh() else: print(''Your choice was "{}". Please use an accepted input value ..''.format(choi)) print( accepted ) choi = None


Puede usar el método de confirm click .

import click if click.confirm(''Do you want to continue?'', default=True): print(''Do something'')

Esto se imprimirá:

$ Do you want to continue? [Y/n]:

Debería funcionar para Python 2/3 en Linux, Mac o Windows.

Documentos: http://click.pocoo.org/5/prompts/#confirmation-prompts


Qué tal esto:

def yes(prompt = ''Please enter Yes/No: ''): while True: try: i = raw_input(prompt) except KeyboardInterrupt: return False if i.lower() in (''yes'',''y''): return True elif i.lower() in (''no'',''n''): return False


Sé que esto se ha respondido de varias maneras y esto puede no responder a la pregunta específica de OP (con la lista de criterios), pero esto es lo que hice para el caso de uso más común y es mucho más simple que las otras respuestas:

answer = input(''Please indicate approval: [y/n]'') if not answer or answer[0].lower() != ''y'': print(''You did not indicate approval'') exit(1)


También puede usar el prompter .

Sin vergüenza, tomado del README:

#pip install prompter from prompter import yesno >>> yesno(''Really?'') Really? [Y/n] True >>> yesno(''Really?'') Really? [Y/n] no False >>> yesno(''Really?'', default=''no'') Really? [y/N] True


Una manera muy simple (pero no muy sofisticada) de hacer esto para una sola opción sería:

msg = ''Shall I?'' shall = raw_input("%s (y/N) " % msg).lower() == ''y''

También podría escribir una función simple (ligeramente mejorada) alrededor de esto:

def yn_choice(message, default=''y''): choices = ''Y/n'' if default.lower() in (''y'', ''yes'') else ''y/N'' choice = raw_input("%s (%s) " % (message, choices)) values = (''y'', ''yes'', '''') if choices == ''Y/n'' else (''y'', ''yes'') return choice.strip().lower() in values


como lo menciona @Alexander Artemenko, aquí hay una solución simple usando strtobool

from distutils.util import strtobool def user_yes_no_query(question): sys.stdout.write(''%s [y/n]/n'' % question) while True: try: return strtobool(raw_input().lower()) except ValueError: sys.stdout.write(''Please respond with /'y/' or /'n/'./n'') #usage >>> user_yes_no_query(''Do you like cheese?'') Do you like cheese? [y/n] Only on tuesdays Please respond with ''y'' or ''n''. ok Please respond with ''y'' or ''n''. y >>> True


en 2.7, ¿esto también es no-pitónico?

if raw_input(''your prompt'').lower()[0]==''y'': your code here else: alternate code here

capta cualquier variación de Yes al menos.


def question(question, answers): acceptable = False while not acceptable: print(question + "specify ''%s'' or ''%s''") % answers answer = raw_input() if answer.lower() == answers[0].lower() or answers[0].lower(): print(''Answer == %s'') % answer acceptable = True return answer raining = question("Is it raining today?", ("Y", "N"))

Así es como lo haría.

Salida

Is it raining today? Specify ''Y'' or ''N'' > Y answer = ''Y''