Како покренути басх скрипте користећи Питхон?

Ако користите Линук, онда би вам се дефинитивно допале команде љуске.

А ако радите са Питхон-ом, можда сте покушали да аутоматизујете ствари. То је начин да се уштеди време. Можда имате и неке басх скрипте за аутоматизацију ствари.

Питхон је згодан за писање скрипти него басх. А управљање Питхон скриптама је једноставно у поређењу са басх скриптама. Биће вам тешко да одржавате басх скрипте када буде расла.

Али шта ако већ имате басх скрипте које желите да покренете користећи Питхон?

Постоји ли начин да се изврше басх команде и скрипте у Питхон-у?

Да, Питхон има уграђени модул који се зове подпроцес који се користи за извршавање команди и скрипти унутар Питхон скрипти. Погледајмо детаљно како да извршимо басх команде и скрипте у Питхон скриптама.

Извршавање Басх команди

Као што сте можда већ видели, подпроцес модула се користи за извршавање басх команди и скрипти. Обезбеђује различите методе и класе за исто.

Постоји углавном један метод и једна класа о којима треба знати из модула подпроцеса. Они су вођени и Попен. Ова два нам помажу да извршимо басх команде у Питхон скриптама. Хајде да их видимо једног по једног.

субпроцесс.рун()

Метод субпроцесс.рун() ће узети листу стрингова као позициони аргумент. Ово је обавезно јер има команду басх и аргументе за то. Прва ставка на листи је име команде, а преостале ставке су аргументи команде.

  Како да поправите грешку цом.аппле.мобилепхоне 1035

Погледајмо брз пример.

import subprocess
subprocess.run(["ls"])

Горња скрипта наводи све ставке у тренутном радном директоријуму као скрипта. У горњој скрипти нема аргумената за команду. Дали смо само басх команду. Можемо да обезбедимо додатне аргументе команди лс као што су -л, -а, -ла, итд.

Погледајмо брз пример са командним аргументима.

import subprocess
subprocess.run(["ls", "-la"])

Горња команда приказује све датотеке укључујући скривене датотеке заједно са дозволама. Навели смо аргумент ла који приказује датотеке и директоријуме, додатне информације и скривене датотеке.

Можда ћемо на крају направити неке грешке док пишемо команде. Грешке ће се повећавати у складу са грешкама. Шта ако желите да их ухватите и користите касније? Да, то можемо да урадимо користећи аргумент кључне речи стдерр.

Хајде да видимо пример.

import subprocess
result = subprocess.run(["cat", "sample.txt"], stderr=subprocess.PIPE, text=True)
print(result.stderr)

Уверите се да немате датотеку са именом сампле.ткт у радном директоријуму. Вредност аргумента кључне речи стдерр је ПИПЕ што помаже да се врати грешка у објекту. Можемо му приступити касније са истим именом. А текст аргумента кључне речи помаже да се каже да излаз треба да буде стринг.

Слично томе, можемо да ухватимо излаз команде користећи аргумент кључне речи стдоут.

import subprocess
result = subprocess.run(["echo", "Hello, World!"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
print(result.stdout)

субпроцесс.рун() – улаз

Можете да дате унос за команде користећи аргумент кључне речи за унос. Даћемо уносе у стринг формату. Дакле, морамо да подесимо текст аргумента кључне речи на Тачно. Подразумевано, узима га у бајтовима.

Погледајмо пример.

import subprocess
subprocess.run(["python3", "add.py"], text=True, input="2 3")

У горњем програму, Питхон скрипта адд.пи ће узети два броја као улаз. Дали смо улаз за Питхон скрипту користећи аргумент кључне речи инпут.

  5 најлакших веб претраживача

подпроцес.Попен()

Класа субпроцесс.Попен() је напреднија од методе субпроцесс.рун(). То нам даје више опција за извршавање команди. Направићемо инстанцу подпроцеса.Попен() и користити је за разне ствари као што је познавање статуса извршења команде, добијање излаза, давање улаза, итд.,

Постоји неколико метода класе субпроцесс.Попен() које треба да знамо. Хајде да их видимо један по један заједно са примерима кода.

чекати

Користи се за чекање до завршетка извршења команде. Следећи редови Питхон скрипте неће се извршити све док се не заврши претходна наредба која је написана након методе чекања. Хајде да видимо пример.

import subprocess
process = subprocess.Popen(["ls", "-la"])
print("Completed!")

Покрените горњи код и посматрајте излаз. Видећете да је порука Завршено! се штампа пре извршења команде. То можемо избећи методом чекања. Сачекајмо до завршетка команде.

import subprocess
process = subprocess.Popen(["ls", "-la"])
process.wait()

print("Completed!")

Ако видите излаз за горњи код, онда ћете схватити да чекање заправо ради. Наредба за штампање се извршава након завршетка извршења команде.

комуницирати

Метода цоммуницате се користи за добијање излаза, грешке и давање улаза команди. Враћа тупле који садржи излаз и грешку респективно. Хајде да видимо пример.

import subprocess
process = subprocess.Popen(["echo", "Hello, World!"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
result = process.communicate()
print(result)

подпроцес.Попен() – улаз

Не можемо директно проследити унос класи Попен. Морамо да користимо аргумент кључне речи који се зове стдин да бисмо дали инпут команди. Инстанца класе Попен ће нам обезбедити стдин објекат. Има метод који се зове писање који се користи за давање уноса команди.

Као што смо раније расправљали, подразумевано ће узимати улазе као објекте налик бајтовима. Дакле, не заборавите да поставите текст аргумента кључне речи на Тачно док креирате инстанцу Попен-а.

  10 најбољих маски за лице за вишекратну употребу за боље дисање и здравији ваздух

Хајде да видимо пример.

import subprocess
process = subprocess.Popen(["python3", "add.py"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
process.stdin.write("2 3")
process.stdin.close()
print(process.stdout.read())

анкета

Анкета метода се користи за проверу да ли је извршење команде завршено или не. Овај метод ће вратити Ноне ако се команда још увек извршава. Хајде да видимо пример.

import subprocess
process = subprocess.Popen(['ping', '-c 5', 'geekflare.com'], stdout=subprocess.PIPE, text=True)
while True:
    output = process.stdout.readline()
    if output:
    	print(output.strip())
    result = process.poll()
    if result is not None:
        break

У горњем коду смо користили команду пинг са 5 захтева. Постоји бесконачна петља која се понавља до завршетка извршења команде. Користили смо анкету метода да проверимо статус извршења команде. Ако анкета метода врати код који није Ноне, онда се извршење завршава. И бесконачна петља се прекида.

Извршавање Басх скрипти

Видели смо два начина за извршавање команди. Сада, хајде да видимо како да извршимо басх скрипте у Питхон скриптама.

Потпроцес има метод који се зове позив. Овај метод се користи за извршавање басх скрипти. Метод враћа излазни код из басх скрипте. Подразумевани излазни код за басх скрипте је 0. Погледајмо пример.

Направите басх скрипту са именом працтице.сх на следећи начин.

#!/bin/bash

echo "Hello, World!"
exit 1

Сада напишите Питхон скрипту и извршите горњу басх скрипту.

import subprocess
exit_code = subprocess.call('./practice.sh')
print(exit_code)

Добићете следећи излаз када покренете горњу Питхон скрипту.

Hello, World!
1

Закључак

Видели смо како се извршавају басх команде и скрипте у Питхон-у. Можете их користити за ефикаснију аутоматизацију ствари.

Срећно кодирање 👨‍💻