Como eu tenho um script Python que a) pode aceitar a entrada do usuário e como faço para que ele b) seja lido nos argumentos se executado a partir da linha de comando?
argparse
vez de optparse
.
Como eu tenho um script Python que a) pode aceitar a entrada do usuário e como faço para que ele b) seja lido nos argumentos se executado a partir da linha de comando?
argparse
vez de optparse
.
Respostas:
Para ler a entrada do usuário, você pode tentar o cmd
módulo para criar facilmente um mini-interpretador de linha de comando (com textos de ajuda e preenchimento automático) e raw_input
( input
para Python 3+) para ler uma linha de texto do usuário.
text = raw_input("prompt") # Python 2
text = input("prompt") # Python 3
Entradas de linha de comando estão em sys.argv
. Tente isso no seu script:
import sys
print (sys.argv)
Existem dois módulos para analisar as opções da linha de comando: (obsoleto desde o Python 2.7, use em optparse
argparse
vez disso) e getopt
. Se você quiser apenas inserir arquivos no seu script, observe o poder de fileinput
.
A referência da biblioteca Python é seu amigo.
var = raw_input("Please enter something: ")
print "you entered", var
Ou para Python 3:
var = input("Please enter something: ")
print("You entered: " + var)
raw_input
, é uma função interna.
raw_input
não está mais disponível no Python 3.x. Mas raw_input
foi renomeadoinput
, existe a mesma funcionalidade.
input_var = input("Enter something: ")
print ("you entered " + input_var)
import fileinput result=[] for line in fileinput.input(): result.append(line)
A melhor maneira de processar argumentos de linha de comando é o argparse
módulo.
Use raw_input()
para obter a entrada do usuário. Se você importar, readline module
seus usuários terão edição e histórico de linhas.
Este programa simples ajuda você a entender como alimentar a entrada do usuário na linha de comando e mostrar ajuda na transmissão de argumentos inválidos.
import argparse
import sys
try:
parser = argparse.ArgumentParser()
parser.add_argument("square", help="display a square of a given number",
type=int)
args = parser.parse_args()
#print the square of user input from cmd line.
print args.square**2
#print all the sys argument passed from cmd line including the program name.
print sys.argv
#print the second argument passed from cmd line; Note it starts from ZERO
print sys.argv[1]
except:
e = sys.exc_info()[0]
print e
1) Para encontrar a raiz quadrada de 5
C:\Users\Desktop>python -i emp.py 5
25
['emp.py', '5']
5
2) Passando argumento inválido que não seja o número
C:\Users\bgh37516\Desktop>python -i emp.py five
usage: emp.py [-h] square
emp.py: error: argument square: invalid int value: 'five'
<type 'exceptions.SystemExit'>
Use 'raw_input' para entrada de um console / terminal.
se você quiser apenas um argumento de linha de comando como um nome de arquivo ou algo assim, por exemplo
$ python my_prog.py file_name.txt
então você pode usar o sys.argv ...
import sys
print sys.argv
sys.argv é uma lista em que 0 é o nome do programa, portanto, no exemplo acima, sys.argv [1] seria "file_name.txt"
Se você deseja ter opções completas de linha de comando, use o módulo optparse.
Pev
Se você estiver executando o Python <2.7, precisará optparse , que, conforme o documento explica, criará uma interface para os argumentos da linha de comando chamados quando o aplicativo for executado.
No entanto, no Python ≥2.7, optparse foi descontinuado e foi substituído pelo argparse, como mostrado acima. Um exemplo rápido dos documentos ...
O código a seguir é um programa Python que pega uma lista de números inteiros e produz a soma ou o máximo:
import argparse
parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
const=sum, default=max,
help='sum the integers (default: find the max)')
args = parser.parse_args()
print args.accumulate(args.integers)
No Python 3.2.2.7, agora existe argparse para processar argumentos de linha de comando.
Se for uma versão 3.x, basta usar:
variantname = input()
Por exemplo, você deseja inserir 8:
x = input()
8
x será igual a 8, mas será uma sequência, exceto se você definir de outra forma.
Então você pode usar o comando convert, como:
a = int(x) * 1.1343
print(round(a, 2)) # '9.07'
9.07
import six
if six.PY2:
input = raw_input
print(input("What's your name? "))