Transcrição do áudio
É coleguinha, não acredito, tá funfando hein Bom, no vídeo anterior vimos ali um pouco de Python E adivinha, é cara, um vídeo gravado ali com scripts Eu não usei OBS Studio, nada assim né Esse vídeo aqui também está sendo feito assim Prova que conhecer comandos é importante, ok O módulo subproxies, cara, ele é um módulo muito importante do Python Beleza Como eu posso dizer Aqui nós podemos executar processos Então, executamos o script Python O script Python analisa os dados do sistema operacional Vai lá, executa o subproxies Obtém o output, faz alguma coisa Então sempre estamos orquestrando processos Essa é a ideia Legal Então vamos ver aqui Sobre os principais, tá E está tendo uma mudança Na verdade já teve, né Por exemplo, o Poppin está deixando de ser o recomendado E está sendo recomendado o run Então vamos lá Subproxies.run então, tá Bom, então esse cara aqui Antes do Python 3.5 Beleza O Poppin era, então, o que se falava Mas depois ali, 3.5 para frente Recomenda-se o run O run, ele tem uma entrada que são os argumentos Que esses primeiros argumentos aqui O caminho do processo Do script Você pode executar outro script, processos Command line Se você quer executar um command line, tá Lembre-se que você tem que marcar shell igual a true Exemplo, ls Traço l Exemplo, ls Então, você tem que colocar isso aqui ls, espaço, traço l E aqui você tem que colocar esse argumento Como true Aí ele vai executar no command line Beleza Bom, então vamos lá É o comando Então args, que é o mais importante É o comando Então, por exemplo Você tem que transformar num array E imputar o array ali dentro Tá Simples assim Então, você tem que Ah, bom E, por exemplo, o script é muito fácil O sr e bin python E você dá o caminho do diretório Ou, desculpa, o caminho do script Ou, que o teu script Ele tenha o shell bang Seja executável Você poderia chamar ele aqui assim também E seria assim, ó Se o script fosse Ele executável por si só Bang, chmod mais x Seria assim Beleza? Bom O que nós trabalhamos É na captura do output E aí nós vamos ter que trabalhar com regex E isso é importante, tá? Trabalhar com regex é muito importante Se você não sabe o que é regex Eu não tenho nenhum livro de regex Pra te indicar Mas você pode procurar um cara chamado G. Skinner, tá? Esse aqui é o site do curso hack Tá? G. Skinner regex Opa, esqueci do x G. Skinner regex Passou uma pancada de url ali Puta que pariu, hein? Aí, sua próxima brincadeira A hacker ficava olhando E cavucando minhas urls ali Isso é muito comum, tá? Então, aqui você coloca Por exemplo Eu quero procurar todas as Por exemplo Letras, palavras Tá? Então, João, Maria Abobrinha Bobiça É bobica Quando você se diria Legal, é meio esquisito se você se diria Então, repare que aqui eu estou Pegando todas as palavras Se eu fizesse assim, eu pegaria todas as letras Não é isso? Que eu pegaria todas as Palavras Obrigatoriamente, né? Tem que ter mais de uma ali Então, você começa a brincar de regex Pegar o output Fazer o parser E aí, então, compreender o que foi feito Beleza? Essa é a parte mais difícil Que tem na história Tem uma pancada de bibliotecas Python No pip que fazem isso, praticamente Bom Você pode simplesmente usar devnull Que é você jogar no lixo Pipe, você injeta O output do cara Dentro do teu input Ou você pode capturar isso E jogar dentro de uma variável Você que decide O padrão Se você executar assim, o run Ele vai pegar todo o output do processo E vai jogar no input Do processo E aqui é o É o script que está sendo executado Entendeu a jogada? Aí ele vai imprimir na tela Ele imprimiu na tela Porque ele pegou todo o output Do ls e jogou No próprio script que está sendo executado Naquele momento, então Ele entrelaça o output Do próprio script e o output Do command line que você executou Isso é ruim Às vezes, tá? Para você achar o que retornou A entrelaça, o output do script O output do Do comando É por isso que é muito comum você fazer isso aqui Então você chama o subprocess run Manda ali um command line Num vetor, tá ok? Olha, ó, ls Barra, traço, lha E aí você captura O pipe, certo? Coloca ali como universal lines True, que é as quebras de linha Formato universal E aí você joga O process.stdout Dentro de output E aí você pode pegar O output e trabalhar aquilo Como uma variável Toda a resposta do ls está ali dentro Daquela variável output Você pode fazer um parser Procurar alguma coisa Cara, Python é muito poderoso Python é muito poderoso Caso você precise Quebrar as linhas E olhar linha a linha o que está acontecendo Então você pega o output Do output você dá um split line E como você deu Universal new lines Aqui, ó Você vai poder usar o split lines Aqui E aí você vai poder fazer um laço de repetição E imprimir as linhas aqui, ó Você poderia fazer um parser Procurar alguma coisa Certo? Esse aqui é o exemplo da execução De um comando Você poderia estar executando outro script Python Outro script de outra tecnologia De outra linguagem, não importa Aqui é o pop, hein? Pop está saindo de luz Mas eu vou te falar, vai demorar muito Porque é muito utilizado mesmo De forma absurda Bom Dá mais uma pancada de parâmetro, cara Encoding é bacana, tá? Encoding aqui é bacana Para você Trocar dados entre dois processos Da forma correta Lá você também tem que ler no mesmo encode Definiu o TF8? Leia o TF8 lá também E é possível você passar Dados, ou seja Você injetar dados No input do filho Pegar o output Que é o padrão, né? Até agora eu estou só mostrando Você pegar o output E você processar o output Aqui você está fazendo a mesma coisa Com o pop, hein? Que foi feita com o run Beleza? Legal Olha só Aqui eu tenho um exemplo De onde eu passo o input para o filho Olha que legal Aqui eu tenho o processo filho O script filho, né? Filho.py E aqui eu tenho o input E aqui eu tenho o input E aqui eu estou recebendo a linha Do stdin Input Readline Então eu estou jogando dentro do data Estou pegando o data E estou fazendo um jasonzinho básico Então o pai vai mandar um jason Para ele, olha que legal O pai manda um jason para o filho E aí o filho pode usar Aqui o jason E capturar alguma coisa E pegar e fazer alguma coisa Então como que o pai chama o filho E manda um jason para o filho Vamos lá Python3.tmp.filho.py Que é o processo filho Lembre-se que aqui eu estou no processo pai E aí eu digo pipe stdolt stder stdin, desculpe Poderia ter pego o stder também Beleza Aí olha só Input jason dumps Eu estou convertendo um jason em uma string Certo? Nessa linha E jogando dentro da variável input Depois eu estou pegando o input aqui Ponto encoding Lembra que eu falei agora em a pouco Sobre pegar um texto Estou jogando em UTF-8 E lá no filho Que eu esqueci Aqui ele já leu no readlines Poderia ter pego aqui os bits Os bytes Em vez de ter readlines Eu teria dado decode UTF-8 E aí eu teria dado um readline Depois o decode Poderia ter feito isso Aqui então eu estou dando um encode UTF-8 Jogando lá dentro Como input Dentro do filho communicate Filho communicate é um método De process Process tem um método communicate Que recebe o input Como algo não obrigatório Tanto que ele está como não obrigatório Python tem isso Ele recebe o input Num chamado de método Uma função Você tem os parâmetros obrigatórios E os opcionais Porque ele não tem Python não tem Sobrecarga de métodos Então como que eu faço Sobrecarga no Python Eu faço usando Não gosto não Eu faço usando Argumentos não obrigatórios Só que aí vira uma bagunça Então eu faço usando Beleza E aí você pega O output e o error Esse communicate ele injeta No filho Executa o filho O filho é executado Então eu pego aqui em output error O resultado Então aqui o colchete 0 é o output E o colchete 1 é o error Lembra? Lembra? O input, o output e o error Então aqui Na saída Aqui o 0 é o output E aqui o 1 é o error E aí ele pega Então você repara Eu consigo mandar dados para um processo filho Injetando no input dele E eu consigo depois vir aqui E resgatar isso aqui Normalmente Beleza? Você vai ver que o pai vai executar o filho Tá certo Legal? Então O próximo vídeo vai ser o próximo vídeo Vou falar sobre Como você deixa o seu script mais Profissional Até lá