Comando não encontrado tentando o script python para o bash

0

Estou tentando executar um comando bash a partir de um script python depois de ver esses vídeos ( 1 , 2 ). Esta é minha primeira vez tentando isso.

Meu script:

import os
import subprocess

os.system("cd Downloads/smartgit")
#  os.system("cd Downloads/smartgit/bin")
#  os.system('sudo "bin/smartgit.sh"')
#  os.system("sudo bin/smartgit.sh")
#  os.system("sudo ./smartgit.sh")
#  subprocess.call("./smargit.sh", shell=True)
#  subprocess.call("sudo ./smargit.sh", shell=True)
#  subprocess.call("sudo smargit.sh", shell=True)
subprocess.call("bin/smargit.sh", shell=True)

Você pode ver minhas encarnações anteriores comentadas. Eu chmod'd o arquivo, mas nem isso:

malikarumi@Tetuoan2:~/Downloads/smartgit/bin$ cd ~
malikarumi@Tetuoan2:~$ python smartgit.py
sh: 1: bin/smartgit.sh: not found

Nem isto:

malikarumi@Tetuoan2:~$ python smartgit.py
sudo: bin/smartgit.sh: command not found

Trabalhei, e não entendi porque, porque:

malikarumi@Tetuoan2:~$ cd Downloads/smartgit
malikarumi@Tetuoan2:~/Downloads/smartgit$ bin/smartgit.sh

faz!

Obrigado por me ajudar a entender e corrigir este script.

    
por Malik A. Rumi 11.09.2017 / 12:04

3 respostas

1

Por que você está usando Python se tudo o que você faz com isso é invocar comandos shell? Um script de shell simples seria muito mais fácil e, se a maioria dos comandos Python utilizasse o os.system ou o módulo subprocess , você está basicamente envolvendo um shell script dentro de um programa Python (com armadilhas adicionais) para aprender alguns scripts de shell de qualquer maneira.

Veja como você pode conseguir o mesmo (até onde eu entendi) com um script de shell:

#!/bin/sh
cd Downloads/smartgit
bin/smargit.sh

Ou mais simplesmente:

Downloads/smartgit/bin/smargit.sh
    
por David Foerster 18.09.2017 / 23:28
3

os.system() inicia um shell, executa o comando e fecha esse shell. O efeito do cd é perdido. Altere o diretório com o Python :

os.chdir("Downloads/smartgit")
subprocess.call(["bin/smargit.sh"])

Melhor ainda, qual chdir ? Por que não chamar diretamente o script:

smartgit_path = os.path.expanduser("~/Download/smartgit/bin/smartgit.sh")
subprocess.call([smartgit_path])
    
por muru 11.09.2017 / 12:11
3

Não faz sentido executar os comandos cd na função os.system(...) do Python, pois cada uma dessas chamadas gera seu próprio shell separado dentro do qual o comando é executado, o que não afeta o processo principal ou os shells de outra função chamadas. Portanto, o cd de uma chamada não afeta o diretório de trabalho de outras chamadas.

Você pode usar os.chdir(...) para alterar o diretório de trabalho de seu todo Processo em Python.

No entanto, você não deve depender de caminhos relativos implícitos como este em seu aplicativo; isso será interrompido se você executar o script a partir de qualquer outro local que não seja o diretório inicial. Talvez você queira prefixar o caminho com ~/ para ser relativo ao seu diretório pessoal.

    
por Byte Commander 11.09.2017 / 12:12