Eu tenho este script python :
#!/usr/bin/env python
def getPermutation(s, prefix=''):
if len(s) == 0:
print prefix
for i in range(len(s)):
getPermutation(s[0:i]+s[i+1:len(s)],prefix+s[i] )
getPermutation('abcd','')
No entanto, quero poder chamar esse script usando uma variável para "abcd" para que eu possa inserir qualquer combinação de letras em vez de "abcd" como "efgh" por exemplo.
Normalmente, posso usar um $@
ou $1
em vez de abcd
na última linha em um script bash como este:
#!/usr/bin/env python
def getPermutation(s, prefix=''):
if len(s) == 0:
print prefix
for i in range(len(s)):
getPermutation(s[0:i]+s[i+1:len(s)],prefix+s[i] )
getPermutation("$1",'')
Mas quando executo o script usando algo como ./scriptname.py efgh
recebo:
$1
1$
em vez das permutações para "efgh".
O equivalente em python do array de parâmetros posicionais do shell
$1
,$2
etc.sys.argv
Então:
então
Muitas maneiras de parametrizar python. argumentos posicionais, variáveis de ambiente e argumentos nomeados. Variáveis de ambiente:
import os e use o getenv como:
Onde o segundo parâmetro é o padrão para a variável env que não está sendo configurada.
Argumentos posicionais:
Use sys.argc, sys.argv[n] depois de importar sys.
Parâmetros nomeados:
Ou para parâmetros nomeados (o que você perguntou)
em seguida, descreva os parâmetros possíveis:
e use-os como args.width etc.
Ok, descobri uma solução alternativa enquanto escrevia a pergunta, mas senti que isso seria útil para outros usuários, então aqui está.
Para python (python2), podemos usar
raw_input()
em vez de$1
, mas funciona um pouco diferente. Em vez de inserir a entrada após o nome do script no bash, você será solicitado a inserir o valor após executar o script.Aqui está um exemplo:
A execução do script solicitará que o usuário "insira caracteres:". Depois que o usuário inserir os caracteres e pressionar ENTER, as permutações serão impressas no terminal.
Aqui está a fonte que também explica como fazer isso para python3.
Na linha de comando: FileName.py -l abcd