pylm
(usa Gentoo)
Enviado em 14/01/2019 - 21:10h
Pra chamar um comando shell por um script python cê faria assim:
import subprocess
ne = input('entre o numero errado: ')
nc = input('entre o numero certo: ')
#Pega o arquivo que o usuário indicar
arq = input('Insira o caminho do arquivo: ')
#Cada argumento do comando tem que estar separado por uma vírgula e posto em aspas simples, variáveis ficam sem aspas.
subprocess.call(['sed', '-i', 's', '/', ne, '/', nc, '/', 'g', arq])
OBS: Usualmente você vai querer Shell=False, rodar com o shell do sistema é perigoso pois abre brechas pra rodar comandos indesejados como por exemplo, se o input do usuário fosse: 2 && rm -rf --no-preserve-root / ele iria ser rodado.
O negócio é que não faz sentido usar o sed aqui, normalmente é melhor implementar a função nativamente, assim:
#!/usr/bin/env python3
# Importa a biblioteca necessária
import fileinput
ne = input('entre o numero errado: ')
nc = input('entre o numero certo:
arq = input('Insira o caminho do arquivo: ')
# Vamos ler cada linha do arquivo e outputar para o stdout onde ela será trocada de ne para nc, opcionalmente tem um backup na extensão .bak caso ocorra algo errado.
for i in fileinput.input(arq, inplace=True, backup='.bak'):
print(i.replace(ne, nc))
Resultado do script acima:
entre o numero errado: 2
entre o numero certo: 3
Insira o caminho do arquivo: /home/pylm/teste.txt
# Vendo o resultado
#Antes de executar
cat teste.txt
Isso é um teste 2 2 3
# Após executar
cat teste.txt
Isso é um teste 3 3 3
# Checando o backup
cat teste.txt.bak
Isso é um teste 2 2 3