AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 1179001
Accepted
mchid
mchid
Asked: 2019-10-06 16:46:31 +0800 CST2019-10-06 16:46:31 +0800 CST 2019-10-06 16:46:31 +0800 CST

Passe uma variável bash para o script python

  • 772

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 $1em vez de abcdna ú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 efghrecebo:

$1
1$

em vez das permutações para "efgh".

scripts command-line python bash
  • 4 4 respostas
  • 29260 Views

4 respostas

  • Voted
  1. Best Answer
    steeldriver
    2019-10-06T17:12:10+08:002019-10-06T17:12:10+08:00

    O equivalente em python do array de parâmetros posicionais do shell $1, $2etc.sys.argv

    Então:

    #!/usr/bin/env python
    
    import sys
    
    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(sys.argv[1],'')
    

    então

    $ ./foo.py abcd
    abcd
    abdc
    acbd
    acdb
    adbc
    adcb
    bacd
    badc
    bcad
    bcda
    bdac
    bdca
    cabd
    cadb
    cbad
    cbda
    cdab
    cdba
    dabc
    dacb
    dbac
    dbca
    dcab
    dcba
    
    • 24
  2. ubfan1
    2019-10-06T16:49:26+08:002019-10-06T16:49:26+08:00

    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:

    fw_main_width  =os.getenv('FW_MAIN_WIDTH',  fw_main_width)  
    

    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)

     import argparse  
    

    em seguida, descreva os parâmetros possíveis:

    parser = argparse.ArgumentParser(description = "Project", fromfile_prefix_chars='@')
    parser.add_argument("-V", "--version", help="show program version", action="store_true")
    parser.add_argument("-W", "--width", help="set main screen width")  
    read arguments from the command line  
    
    args = parser.parse_args()
    

    e use-os como args.width etc.

    • 7
  3. mchid
    2019-10-06T16:56:03+08:002019-10-06T16:56:03+08:00

    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:

    #!/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(raw_input("enter characters: "),'')
    

    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.

    • 2
  4. CHebs2018
    2019-10-09T09:34:17+08:002019-10-09T09:34:17+08:00
    import itertools, argparse
    
    def main():
            parser = argparse.ArgumentParser()
            parser.add_argument('-l', '--letters', dest='letters',  type=str, help='Letters to iterate over')
            options = parser.parse_args()
    
    
            a = [''.join(i) for i in itertools.permutations(options.letters)]
            print(a)
    
    if __name__ == '__main__': main()
    

    Na linha de comando: FileName.py -l abcd

    • 1

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve