Eu sei que posso executar um script Python a partir do meu script bash usando o seguinte:
python python_script.py
Mas e se eu quisesse passar uma variável / argumento para meu script Python do meu script bash. Como eu posso fazer isso?
Bash bash trabalhará em um nome de arquivo e, em seguida, python fará o upload, mas eu preciso enviar o nome de arquivo de bash para python quando eu chamá-lo.
python python_script.py
em seu shell padrão no Debian, você já está usando o bash ... então faça em seu script bash:python python_script.py arg1 arg2 ...
Respostas:
Para executar um script python em um script bash, você precisa chamar o mesmo comando que faria em um terminal. Por exemplo
> python python_script.py var1 var2
Para acessar essas variáveis em python, você precisará
import sys print sys.argv[0] # prints python_script.py print sys.argv[1] # prints var1 print sys.argv[2] # prints var2
fonte
Usar
python python_script.py filename
e em seu script Python
import sys print sys.argv[1]
fonte
Ao lado
sys.argv
, também dê uma olhada no módulo argparse , que ajuda a definir opções e argumentos para scripts.fonte
Opção incorporada:
Envolva o código python em uma função bash.
#!/bin/bash function current_datetime { python - <<END import datetime print datetime.datetime.now() END } # Call it current_datetime # Call it and capture the output DT=$(current_datetime) echo Current date and time: $DT
Use variáveis de ambiente para passar dados para seu script Python incorporado.
#!/bin/bash function line { PYTHON_ARG="$1" python - <<END import os line_len = int(os.environ['PYTHON_ARG']) print '-' * line_len END } # Do it one way line 80 # Do it another way echo $(line 80)
http://bhfsteve.blogspot.se/2014/07/embedding-python-in-bash-scripts.html
fonte
usar no script:
echo $(python python_script.py arg1 arg2) > /dev/null
ou
python python_script.py "string arg" > /dev/null
O script será executado sem saída.
fonte
Eu tenho um script bash que chama uma pequena rotina Python para exibir uma janela de mensagem. Como preciso usar killall para interromper o script Python, não posso usar o método acima, pois isso significaria executar killall python, que poderia remover outros programas Python, então eu uso
pythonprog.py "$argument"
& # O & retorna o controle direto para o script bash, portanto, deve estar fora dos crases. A visualização desta mensagem está sendo exibida sem "` "nenhum dos lados do comando por algum motivo.Contanto que o script python seja executado a partir do cli por nome em vez de python pythonprog.py, isso funciona dentro do script. Se precisar de mais de um argumento, basta usar um espaço entre cada um entre as aspas.
fonte
Imprima todos os args sem o nome do arquivo:
for i in range(1, len(sys.argv)): print(sys.argv[i])
fonte
e dê uma olhada no módulo getopt . Funciona muito bem para mim!
fonte