Transcrição do áudio
É coleguinha, acredito, tá fufando, hein? Bom, no vídeo anterior vimos 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. 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 ScriptPython, o ScriptPython 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. E está tendo uma mudança, na verdade já teve, né? Por exemplo, Poppin está deixando de ser o recomendado e está sendo recomendado o Run. Então vamos lá. Subproxies.run então. Bom, então esse cara aqui, antes do Python 3.5. Beleza. 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. 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, lembre-se que você tem que marcar shell igual a true. Exemplo ls-l. Então você tem que colocar isso aqui, ls-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. Simples assim. Bom, para executar um Script é muito fácil. Usa e bin Python e você dá o caminho do Script ou que o teu Script, ele tem o shellbang, seja executável, você poderia chamar ele aqui assim também. E seria assim, se o Script fosse executável por si só. Seh mod 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, trabalhar com regex é muito importante. Se você não sabe o que é regex, eu não tenho nenhum livro de regex para te indicar. Mas você pode procurar um cara chamado G Skinner. Esse aqui é o site do curso Hacker. G Skinner Regex. Opa esqueci do x. G Skinner Regex. Passou uma pancada de URL ali. Puta que pariu. Aí sua próxima brincadeira hacker ficava cavucando minhas URL. Isso é muito comum. Então aqui você coloca, por exemplo, eu quero procurar todas as letras, palavras. Então João, Maria, Abobrinha, Bobiça. É Bobica. Legal, é meio esquisito se você se diga. 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. Tem que ter mais de uma ali. Então você começa a brincar de regex, pegar o output, fazer o parcer e aí então compreender o que foi feito. Beleza? Essa é a parte mais difícil que tem na história. Uma pancada de bibliotecas pipe no PIP que fazem isso praticamente. Bom, você pode simplesmente usar dev null, 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 LS e vai jogar no input do processo que aqui é o script que está sendo executado. Entendeu a jogada? 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 para você achar o que retornou. A entrelaça do output do script, do command line. É por isso que é muito comum você fazer isso aqui. Então você chama o subprocess run, manda ali um command line num vetor LS, barra, traço LHA. E aí você captura o pipe, coloca ele como universal lines, true, que as quebras de linha, formato universal. E aí você joga o process.stdolt 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. Aquela variável output que 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. Se 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. Esse aqui é um exemplo da execução de um comando. Você poderia estar executando outro script de Python, outro script de outra tecnologia, de outra linguagem, não importa. Aqui é o pop. Se você está saindo de luz, eu vou te falar, vai demorar muito. Porque é muito utilizado mesmo, cara. 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 até agora, eu estou só mostrando, você pegar o output e você processar o output. Aqui você está fazendo a mesma coisa com o Popem que foi feita com o Run. Beleza? Legal. Olha só, aqui eu tenho um exemplo, da onde eu passo o input para o filho. Olha que legal. Aqui eu tenho o processo filho, o script filho, filho.py. 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 JSON básico. Então o pai vai mandar um JSON para ele. Olha que legal. O pai manda um JSON para o filho e aí o filho pode usar aqui o JSON e capturar alguma coisa, né? E pegar e fazer alguma coisa. Então como que o pai chama o filho e manda um JSON para o filho? Vamos lá. Python 3, tmp filho.py, que é o processo filho. Lembre-se que aqui eu estou no processo pai. E aí eu digo pipe, stdolt, stdir. Stdint, desculpe. Poderia ter pego stdir também. Beleza. Aí olha só, input JSON dumps. Eu estou convertendo um JSON 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 pouco sobre pegar um texto? Em encoding estou jogando em UTF-8. E lá no filho... Que eu esqueci. Aqui ele já leu no read lines. Poderia ter pego aqui os bits, os bytes e ao invés de ter read lines eu teria dado decode, UTF-8 e aí eu teria dado um read line depois do decode. Poderia ter feito isso. Aqui então eu estou dando encode UTF-8 jogando lá dentro como input. Dentro do filho communicate. O filho communicate é um método. De process. Os 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. Em um 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, tá? Eu faço usando argumentos não obrigatórios. Só que aí vira uma bagunça. 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? E se executar, você vai ver que o scriptPy vai executar o filho. Tá certo. Legal? No próximo vídeo vou falar sobre como você deixa seu script mais profissional. Até lá!