Python ichida multi-line bash buyruqlar qanday ishlatiladi?

Python dasturi ichida quyidagi bash buyruqlar qatorlarini ishlatmoqchiman.

tail /var/log/omxlog | stdbuf -o0 grep player_new | while read i
do
    Values=$(omxd S | awk -F/ '{print $NF}')
    x1="${Values}"
    x7="${x1##*_}"
    x8="${x7%.*}"
    echo ${x8}
done

Bilaman, bitta satrli buyruq uchun quyidagi sintaksisdan foydalanishimiz mumkin:

subprocess.call(['my','command'])

Lekin, bir nechta satrda bir nechta buyruqlar mavjud bo'lsa, subprocess.call dan qanday foydalanishim mumkin?

2
Nima uchun uni o'rniga skriptga qo'yish mumkin emas?
qo'shib qo'ydi muallif Inian, manba
Nima uchun uni o'rniga skriptga qo'yish mumkin emas?
qo'shib qo'ydi muallif Inian, manba
Nima uchun uni o'rniga skriptga qo'yish mumkin emas?
qo'shib qo'ydi muallif Inian, manba
Nima uchun faqat /var/log/omxlog ni o'qish va omxd ni to'g'ridan-to'g'ri python-da bajarish kerak? bash bu erda keraksiz ko'rinadi.
qo'shib qo'ydi muallif Stephen Rauch, manba
Nima uchun faqat /var/log/omxlog ni o'qish va omxd ni to'g'ridan-to'g'ri python-da bajarish kerak? bash bu erda keraksiz ko'rinadi.
qo'shib qo'ydi muallif Stephen Rauch, manba
Nima uchun faqat /var/log/omxlog ni o'qish va omxd ni to'g'ridan-to'g'ri python-da bajarish kerak? bash bu erda keraksiz ko'rinadi.
qo'shib qo'ydi muallif Stephen Rauch, manba
subprocess.payani ishlatish haqida ba'zi bir yaxshi narsalar mavjud. stackoverflow.com/a/13332300/1113788 boshqa imkoniyat mavjud bo'lishi mumkin. mahalliy va uzoq kodni bajarish uchun turli xil variantlarga ega bo'lgan python mato kutubxonasiga qarash
qo'shib qo'ydi muallif davidejones, manba
subprocess.payani ishlatish haqida ba'zi bir yaxshi narsalar mavjud. stackoverflow.com/a/13332300/1113788 boshqa imkoniyat mavjud bo'lishi mumkin. mahalliy va uzoq kodni bajarish uchun turli xil variantlarga ega bo'lgan python mato kutubxonasiga qarash
qo'shib qo'ydi muallif davidejones, manba
@davidejones, python mato haqida eslatib o'tganda, qalqon buyruqlar mantiqiy oqimini bir seans orqali ishlatish imkoniyati yo'q. Ammo bunday buyruqlarni onelek kodi sifatida qo'yish va kutilmagan natijalarga erishish uchun uni ishga tushirishga qodir. Aks holda, shell buyruqlarini alohida-alohida run() yoki sudo() usuli bilan qobiqda oddiy operatsiyalarni bajarishga yordam berishi mumkin.
qo'shib qo'ydi muallif S.K. Venkat, manba
@davidejones, python mato haqida eslatib o'tganda, qalqon buyruqlar mantiqiy oqimini bir seans orqali ishlatish imkoniyati yo'q. Ammo bunday buyruqlarni onelek kodi sifatida qo'yish va kutilmagan natijalarga erishish uchun uni ishga tushirishga qodir. Aks holda, shell buyruqlarini alohida-alohida run() yoki sudo() usuli bilan qobiqda oddiy operatsiyalarni bajarishga yordam berishi mumkin.
qo'shib qo'ydi muallif S.K. Venkat, manba
@StephenRauch, mening bosh skriptim uchun munosib python kodini taqdim etsangiz juda xursand bo'laman :)
qo'shib qo'ydi muallif Omid1989, manba
@StephenRauch, mening bosh skriptim uchun munosib python kodini taqdim etsangiz juda xursand bo'laman :)
qo'shib qo'ydi muallif Omid1989, manba
Python ichidagi I/O SPI atrof-muhit birliklariga kirish tufayli python ichida tashqi buyruqlarni chaqirishni istamayman.
qo'shib qo'ydi muallif Omid1989, manba
Python ichidagi I/O SPI atrof-muhit birliklariga kirish tufayli python ichida tashqi buyruqlarni chaqirishni istamayman.
qo'shib qo'ydi muallif Omid1989, manba
Python ichidagi I/O SPI atrof-muhit birliklariga kirish tufayli python ichida tashqi buyruqlarni chaqirishni istamayman.
qo'shib qo'ydi muallif Omid1989, manba
Men buni to'g'ri echim deb bilmayman, lekin boshda siz bir nechta satrlarni yarim qatorlar bilan almashtira olasiz. Masalan, quyruq/var/log/omxlog | stdbuf -o0 grep plater_new | o'qishda i; qiymatlari = $ (omxd S | awk -F/'{print $ NF} "); x1 = "$ {baholar}"; ... va boshqalar. Bu, albatta, juda ko'p o'qilishi mumkin emas, lekin u ishlashi kerak. Buning o'rniga ishlatish uchun bash skriptiga ega bo'lmasligingizning sababi bormi?
qo'shib qo'ydi muallif Guest, manba
Men buni to'g'ri echim deb bilmayman, lekin boshda siz bir nechta satrlarni yarim qatorlar bilan almashtira olasiz. Masalan, quyruq/var/log/omxlog | stdbuf -o0 grep plater_new | o'qishda i; qiymatlari = $ (omxd S | awk -F/'{print $ NF} "); x1 = "$ {baholar}"; ... va boshqalar. Bu, albatta, juda ko'p o'qilishi mumkin emas, lekin u ishlashi kerak. Buning o'rniga ishlatish uchun bash skriptiga ega bo'lmasligingizning sababi bormi?
qo'shib qo'ydi muallif Guest, manba

6 javoblar

quote https://mail.python.org/pipermail/tutor/2013- Yanvar/093474.html :
subprocess.check_outputdan foydalaning (shell_command, shell = True)

import subprocess
cmd = '''
tail /var/log/omxlog | stdbuf -o0 grep player_new | while read i
do
    Values=$(omxd S | awk -F/ '{print $NF}')
    x1="${Values}"
    x7="${x1##*_}"
    x8="${x7%.*}"
    echo ${x8}
done    
'''
subprocess.check_output(cmd, shell=True)

Boshqa misollarni sinab ko'rdim va u ishlaydi.

5
qo'shib qo'ydi
Mato api orqali bunday qobiq buyruqlar bajarish uchun o'xshash usul bormi? Ko'pgina manbalarga ko'ra, bu juda qiyin va juda ko'p narsalarga ega emas.
qo'shib qo'ydi muallif S.K. Venkat, manba

quote https://mail.python.org/pipermail/tutor/2013- Yanvar/093474.html :
subprocess.check_outputdan foydalaning (shell_command, shell = True)

import subprocess
cmd = '''
tail /var/log/omxlog | stdbuf -o0 grep player_new | while read i
do
    Values=$(omxd S | awk -F/ '{print $NF}')
    x1="${Values}"
    x7="${x1##*_}"
    x8="${x7%.*}"
    echo ${x8}
done    
'''
subprocess.check_output(cmd, shell=True)

Boshqa misollarni sinab ko'rdim va u ishlaydi.

5
qo'shib qo'ydi
Mato api orqali bunday qobiq buyruqlar bajarish uchun o'xshash usul bormi? Ko'pgina manbalarga ko'ra, bu juda qiyin va juda ko'p narsalarga ega emas.
qo'shib qo'ydi muallif S.K. Venkat, manba

quote https://mail.python.org/pipermail/tutor/2013- Yanvar/093474.html :
subprocess.check_outputdan foydalaning (shell_command, shell = True)

import subprocess
cmd = '''
tail /var/log/omxlog | stdbuf -o0 grep player_new | while read i
do
    Values=$(omxd S | awk -F/ '{print $NF}')
    x1="${Values}"
    x7="${x1##*_}"
    x8="${x7%.*}"
    echo ${x8}
done    
'''
subprocess.check_output(cmd, shell=True)

Boshqa misollarni sinab ko'rdim va u ishlaydi.

5
qo'shib qo'ydi
Mato api orqali bunday qobiq buyruqlar bajarish uchun o'xshash usul bormi? Ko'pgina manbalarga ko'ra, bu juda qiyin va juda ko'p narsalarga ega emas.
qo'shib qo'ydi muallif S.K. Venkat, manba

o'ylayman sizning bash bilan bir xil bo'lgan sof python yechimi:

logname = '/var/log/omxlog'
with open(logname, 'rb') as f:
    # not sure why you only want the last 10 lines, but here you go
    lines = f.readlines()[-10:]

for line in lines:
    if 'player_new' in line:
        omxd = os.popen('omxd S').read()
        after_ = omxd[line.rfind('_')+1:]
        before_dot = after_[:after_.rfind('.')]
        print(before_dot)
1
qo'shib qo'ydi
@ Omid1989 - OH, siz yuqoridagi misolingizdagi -f ni qoldirdingiz .... Endi u bir oz mantiqan.
qo'shib qo'ydi muallif Stephen Rauch, manba
Tashakkur @StephenRauch. omxd S ning chiqishi Playing 0/22/myfolder/F02_Car_101.mp4 kabi narsadir. Ushbu python kodi old_dot sifatida 101 bo'ladimi?
qo'shib qo'ydi muallif Omid1989, manba
ha -f ni olib tashladim, chunki ma'lum kod qabul qilinganda x8 o'zgaruvchini SPI orqali yuborishni istayman. (Raspberry Pi 3)
qo'shib qo'ydi muallif Omid1989, manba
Tashakkur @StephenRauch. Kodni o'zgartirdim. Endi u ajoyib ishlaydi. Rahmat.
qo'shib qo'ydi muallif Omid1989, manba
Sizning javobingiz uchun rahmat @StephenRauch. Bu mening boshimdagi savolim edi: unix.stackexchange.com/questions/345374/… bu aniq piton yechimiga yordam berishi mumkin. Vaqtingiz va yordamingiz uchun bir milliardga rahmat.
qo'shib qo'ydi muallif Omid1989, manba

o'ylayman sizning bash bilan bir xil bo'lgan sof python yechimi:

logname = '/var/log/omxlog'
with open(logname, 'rb') as f:
    # not sure why you only want the last 10 lines, but here you go
    lines = f.readlines()[-10:]

for line in lines:
    if 'player_new' in line:
        omxd = os.popen('omxd S').read()
        after_ = omxd[line.rfind('_')+1:]
        before_dot = after_[:after_.rfind('.')]
        print(before_dot)
1
qo'shib qo'ydi
@ Omid1989 - OH, siz yuqoridagi misolingizdagi -f ni qoldirdingiz .... Endi u bir oz mantiqan.
qo'shib qo'ydi muallif Stephen Rauch, manba
Tashakkur @StephenRauch. omxd S ning chiqishi Playing 0/22/myfolder/F02_Car_101.mp4 kabi narsadir. Ushbu python kodi old_dot sifatida 101 bo'ladimi?
qo'shib qo'ydi muallif Omid1989, manba
Tashakkur @StephenRauch. Kodni o'zgartirdim. Endi u ajoyib ishlaydi. Rahmat.
qo'shib qo'ydi muallif Omid1989, manba
ha -f ni olib tashladim, chunki ma'lum kod qabul qilinganda x8 o'zgaruvchini SPI orqali yuborishni istayman. (Raspberry Pi 3)
qo'shib qo'ydi muallif Omid1989, manba
Sizning javobingiz uchun rahmat @StephenRauch. Bu mening boshimdagi savolim edi: unix.stackexchange.com/questions/345374/… bu aniq piton yechimiga yordam berishi mumkin. Vaqtingiz va yordamingiz uchun bir milliardga rahmat.
qo'shib qo'ydi muallif Omid1989, manba

o'ylayman sizning bash bilan bir xil bo'lgan sof python yechimi:

logname = '/var/log/omxlog'
with open(logname, 'rb') as f:
    # not sure why you only want the last 10 lines, but here you go
    lines = f.readlines()[-10:]

for line in lines:
    if 'player_new' in line:
        omxd = os.popen('omxd S').read()
        after_ = omxd[line.rfind('_')+1:]
        before_dot = after_[:after_.rfind('.')]
        print(before_dot)
1
qo'shib qo'ydi
@ Omid1989 - OH, siz yuqoridagi misolingizdagi -f ni qoldirdingiz .... Endi u bir oz mantiqan.
qo'shib qo'ydi muallif Stephen Rauch, manba
Tashakkur @StephenRauch. Kodni o'zgartirdim. Endi u ajoyib ishlaydi. Rahmat.
qo'shib qo'ydi muallif Omid1989, manba
Tashakkur @StephenRauch. omxd S ning chiqishi Playing 0/22/myfolder/F02_Car_101.mp4 kabi narsadir. Ushbu python kodi old_dot sifatida 101 bo'ladimi?
qo'shib qo'ydi muallif Omid1989, manba
ha -f ni olib tashladim, chunki ma'lum kod qabul qilinganda x8 o'zgaruvchini SPI orqali yuborishni istayman. (Raspberry Pi 3)
qo'shib qo'ydi muallif Omid1989, manba
Sizning javobingiz uchun rahmat @StephenRauch. Bu mening boshimdagi savolim edi: unix.stackexchange.com/questions/345374/… bu aniq piton yechimiga yordam berishi mumkin. Vaqtingiz va yordamingiz uchun bir milliardga rahmat.
qo'shib qo'ydi muallif Omid1989, manba
Python
Python
372 ishtirokchilar

Bu guruh python dasturlash tilini muhokama qilish uchun. Iltimos, o'zingizni hurmat qiling va faqat dasturlash bo'yicha yozing. Botlar mavzusini @botlarhaqida guruhida muhokama qling! FAQ: @PyFAQ Offtopic: @python_uz_offtopic

Python offtopic group !
Python offtopic group !
150 ishtirokchilar

@python_uz gruppasining offtop gruppasi. offtop bo'lsa ham reklama mumkin emas ) Boshqa dasturlash tiliga oid gruppalar @languages_programming