Gostaria de observar que as respostas anteriores fizeram muitas suposições sobre o conhecimento do usuário. Esta resposta tenta responder à pergunta em um nível mais tutorial.
Para cada chamada do Python, sys.argv
é automaticamente uma lista de strings representando os argumentos (separados por espaços) na linha de comando. O nome vem da convenção de programação C na qual argv e argc representam os argumentos da linha de comandos.
Você vai querer aprender mais sobre listas e seqüências de caracteres enquanto se familiariza com o Python, mas enquanto isso, aqui estão algumas coisas a saber.
Você pode simplesmente criar um script que imprima os argumentos como eles são representados. Também imprime o número de argumentos, usando a len
função na lista.
from __future__ import print_function
import sys
print(sys.argv, len(sys.argv))
O script requer Python 2.6 ou posterior. Se você chamar esse script print_args.py
, poderá invocá-lo com argumentos diferentes para ver o que acontece.
> python print_args.py
['print_args.py'] 1
> python print_args.py foo and bar
['print_args.py', 'foo', 'and', 'bar'] 4
> python print_args.py "foo and bar"
['print_args.py', 'foo and bar'] 2
> python print_args.py "foo and bar" and baz
['print_args.py', 'foo and bar', 'and', 'baz'] 4
Como você pode ver, os argumentos da linha de comando incluem o nome do script, mas não o nome do intérprete. Nesse sentido, o Python trata o script como executável. Se você precisar saber o nome do executável (neste caso, python), você pode usar sys.executable
.
Você pode ver nos exemplos que é possível receber argumentos que contêm espaços se o usuário invocou o script com argumentos encapsulados entre aspas; portanto, o que você obtém é a lista de argumentos fornecidos pelo usuário.
Agora, no seu código Python, você pode usar esta lista de strings como entrada para o seu programa. Como as listas são indexadas por números inteiros baseados em zero, é possível obter os itens individuais usando a sintaxe da lista [0]. Por exemplo, para obter o nome do script:
script_name = sys.argv[0] # this will always work.
Embora interessante, você raramente precisa saber o nome do seu script. Para obter o primeiro argumento após o script para um nome de arquivo, você pode fazer o seguinte:
filename = sys.argv[1]
Esse é um uso muito comum, mas observe que ele falhará com um IndexError se nenhum argumento for fornecido.
Além disso, o Python permite fazer referência a uma fatia de uma lista; portanto, para obter outra lista apenas dos argumentos fornecidos pelo usuário (mas sem o nome do script), você pode fazer
user_args = sys.argv[1:] # get everything after the script name
Além disso, o Python permite atribuir uma sequência de itens (incluindo listas) a nomes de variáveis. Portanto, se você espera que o usuário sempre forneça dois argumentos, pode atribuir esses argumentos (como seqüências de caracteres) a duas variáveis:
user_args = sys.argv[1:]
fun, games = user_args # len(user_args) had better be 2
Portanto, para responder sua pergunta específica, sys.argv[1]
representa o primeiro argumento da linha de comando (como a string
) fornecido ao script em questão. Ele não solicitará entrada, mas falhará com um IndexError se nenhum argumento for fornecido na linha de comando após o nome do script.