Shell Script: Execute um programa python de dentro de um shell script

139

Eu tentei pesquisar a resposta no Google, mas sem sorte.

Preciso usar o servidor do supercomputador do Works, mas para que meu script python seja executado, ele deve ser executado por meio de um shell script.

Por exemplo, eu quero job.shexecutarpython_script.py

Como pode ser isto alcançado?

Harpal
fonte
2
Você já tentou colocar python python_script.pyseu shell script?
Thkala #
Hum python python_script.py. Ou apenas ./python_script.pyse o script tiver uma palavrinha.
2
@delnan: ./python_script.py também requer que o script é executável
thkala
o que exatamente você tentou e qual é o problema? Ou você não fez isso bem de uma pesquisa no google, ou há muita coisa que você não está nos dizendo ...
thkala
3
Essa é uma pergunta bastante antiga, mas a melhor / mais completa resposta é a de João Víctor. Certifique-se de ler para ele.
Still.Tony

Respostas:

193

Apenas verifique se o executável python está na sua variável de ambiente PATH e adicione seu script

python path/to/the/python_script.py

Detalhes:

  • No arquivo job.sh, coloque este
#!/bin/sh
python python_script.py
  • Execute este comando para tornar o script executável para você: chmod u+x job.sh
  • Executá-lo : ./job.sh
Jean-Bernard Jansen
fonte
2
Depende do seu sistema. O Python 3 pode ser o tempo de execução padrão do python ou pode não ser. Você pode verificar executando python --version, e pode aplicar a versão com python3 hello.py.
Jean-Bernard Jansen
O que fazer se não encontrar as importações já instaladas, como os pandas?
Mah65
Isso significa que você lançou o binário python errado ou o ambiente não está certo. Nesse caso, você deve preencher um virtualenv, depois executar source PATH/TO/VENV/bin/activatee ligarpython python_script.py
Jean-Bernard Jansen
Estou tentando fazer isso no automator e estou recebendo um erro; /path/to/Python: can't open file '/path/to/script': [Errno 1] Operation not permittedexiste uma maneira de incluir meu código python em linha dentro do script bash?
Keyslinger 16/04
111

Método 1 - Crie um script de shell:

Suponha que você tenha um arquivo python hello.py Crie um arquivo chamado job.shque contém

#!/bin/bash
python hello.py

marque-o como executável usando

$ chmod +x job.sh

então execute

$ ./job.sh

Método 2 (MELHOR) - Faça o próprio python executar a partir do shell:

Modifique seu script hello.pye adicione-o como a primeira linha

#!/usr/bin/env python

marque-o como executável usando

$ chmod +x hello.py

então execute

$ ./hello.py
João Victor
fonte
5
Edite sua resposta para torná-la mais legível. Você pode usar o botão 101010 no editor de respostas para marcar o conteúdo do script como código.
Thkala
1
Eu sempre esqueço #!/usr/bin/env python. Lembre-se de certificar-se de que você está referenciando a versão + caminho python correta para o seu sistema!
Still.Tony
10

Imho, escrevendo

python /path/to/script.py

Está completamente errado, especialmente nos dias de hoje. Qual python? python2.6? 2,7? 3.0? 3.1? Na maioria das vezes, você precisa especificar a versão python na tag shebang do arquivo python. Eu encorajo a usar

#! / usr / bin / env python2 # ou python2.6 ou python3 ou mesmo python3.1
para compatibilidade.

Nesse caso, é muito melhor ter o script executável e invocá-lo diretamente:

#! / bin / bash

/path/to/script.py

Dessa forma, a versão do python que você precisa é escrita apenas em um arquivo. Atualmente, a maior parte do sistema possui python2 e python3 nesse meio tempo, e acontece que o link simbólico python aponta para python3 , enquanto a maioria das pessoas espera que ele aponte para python2 .

Enrico Carlesso
fonte
1
Você pode passar parâmetros da mesma maneira que com python script.py param?
kristian
@kristian yes./abc.py -h
7

Salve o seguinte programa como print.py:

#!/usr/bin/python3
print('Hello World')

Em seguida, no tipo de terminal:

chmod +x print.py
./print.py
Nishant Ingle
fonte
4

Isso funciona melhor para mim: adicione isso na parte superior do script:

#!c:/Python27/python.exe

(C: \ Python27 \ python.exe é o caminho para o python.exe na minha máquina) Em seguida, execute o script via:

chmod +x script-name.py && script-name.py
peterb
fonte
Apenas para esclarecer, isso é específico do Windows. E o prompt que eu uso é o bash do Git. Acho super útil. Especialmente no ambiente Windows
peterb
4

Isso funciona para mim:

  1. Crie um novo trabalho de arquivo shell. Então, digamos: touch job.she adicione o comando para executar o script python (você pode até adicionar argumentos de linha de comando a esse python, eu geralmente pré-defino meus argumentos de linha de comando).

    chmod +x job.sh

  2. Dentro, job.shadicione os seguintes arquivos py, digamos:

    python_file.py argument1 argument2 argument3 >> testpy-output.txt && echo "Done with python_file.py"

    python_file1.py argument1 argument2 argument3 >> testpy-output.txt && echo "Done with python_file1.py"

A saída do job.sh deve ficar assim:

Done with python_file.py

Done with python_file1.py

Eu uso isso normalmente quando tenho que executar vários arquivos python com argumentos diferentes, predefinidos.

Nota: Apenas um rápido aviso sobre o que está acontecendo aqui:

python_file.py argument1 argument2 argument3 >> testpy-output.txt && echo "completed with python_file.py" . 

  • Aqui, o shell script executará o arquivo python_file.py e adicionará vários argumentos de linha de comando em tempo de execução ao arquivo python.
  • Isso não significa necessariamente que você também deve passar argumentos de linha de comando.
  • Você pode apenas usá-lo como python python_file.py:, puro e simples. Em seguida, o >> imprimirá e armazenará a saída desse arquivo .py no arquivo testpy-output.txt.
  • && é um operador lógico que será executado somente depois que o acima for executado com êxito e como um eco opcional "concluído com python_file.py" será ecoado no seu cli / terminal no tempo de execução.
geekidharsh
fonte
4

Você deve poder invocá-lo como python scriptname.pypor exemplo

# !/bin/bash

python /home/user/scriptname.py 

Verifique também se o script tem permissões para executar.

Você pode torná-lo executável usando chmod u+x scriptname.py.

Shpongle
fonte
2

Eu uso isso e funciona bem

#/bin/bash
/usr/bin/python python python_script.py
Max Hay
fonte
1

Como as outras postagens dizem tudo (e eu me deparei com essa postagem enquanto procurava o seguinte).
Aqui está uma maneira de executar um script python a partir de outro script python:

Python 2:

execfile("somefile.py", global_vars, local_vars)

Python 3:

with open("somefile.py") as f:
    code = compile(f.read(), "somefile.py", 'exec')
    exec(code, global_vars, local_vars)

e você pode fornecer argumentos fornecendo outras sys.argv

dCSeven
fonte