LinuxForum.Fans
Тема

В пайтоне не могу запустить субпроцесс со сложными параметрами

Автор: mogul82 11 сообщений 2525 просмотров
#351261
text

mi='/usr/bin/mediainfo'
mi3='--Output="Video;%DisplayAspectRatio/String%"'
mi8='/media/sda9/pr/Ben.mp4'

b=subprocess.getoutput([mi, mi3, mi8])

#b=subprocess.check_output([mi, mi3, mi8], shell=False) #bb=b.decode("utf-8", "replace")

bb=b print (bb)

Прбовал так

text
b=subprocess.getoutput(['mediainfo --Output="Video;%DisplayAspectRatio/String%"', mi8])

Команда срабатывает, но результат команды такой, как будто не воспринимается параметр:

text
--Output="Video;%DisplayAspectRatio/String%"

Шо делать? Как запаковать параметр?

#351343
"mogul82" написал:
mi3='--Output="Video;%DisplayAspectRatio/String%"'

тут похоже кавычки лишние... или как оно в шеле выглядело?

#351350

Непонятно, выхлоп нужен или нет. Если нет, то

text

subprocess.call([mi, mi3, mi8])

Если нужен, то

text

output = subprocess.check_output([mi, mi3, mi8])
#351493
"Fat-Zer" написал:
тут похоже кавычки лишние... или как оно в шеле выглядело?

Например вот так

text
mediainfo --Output="Video;%DisplayAspectRatio/String%"  /media/sda9/pr/Ben.mp4 

В скрипте пробовал местами поменять одинарные кавычки и двойные, без результата.

#351501
"mogul82" написал:
Например вот так
mediainfo --Output="Video;%DisplayAspectRatio/String%" /media/sda9/pr/Ben.mp4

Ну, если верить ману http://manpages.ubuntu.com/manpages/precise/man1/mediainfo.1.html, вы не туда этот параметр передаёте, он передаётся с

text
--Inform="Video;%DisplayAspectRatio%"
#351502
"mogul82" написал:
В скрипте пробовал местами поменять одинарные кавычки и двойные, без результата.

в скрипте двойные(внутренние) кавычки не нужны.
запускать, по идее, так: b=subprocess.check_output([mi, mi3, mi8])
с getoutput тоже должно работать...

#351505
"Fat-Zer" написал:
в скрипте двойные(внутренние) кавычки не нужны.

Вроде, проглатывает нормально

text

#!/usr/bin/env python3
#-*- coding: utf-8 -*-

import subprocess print(subprocess.check_output(['echo', '"Video;%DisplayAspectRatio/String%"']))

text

$ ./test.py 
b'"Video;%DisplayAspectRatio/String%"\n'

ЗЫ. А, или ты с той точки, что мы шеллу её не передаём, поэтому не нужно экранировать кавычками?

#351512
"-=Serj=-" написал:
--Inform="Video;%DisplayAspectRatio%"

Это без разницы Inform или Output

"Fat-Zer" написал:
в скрипте двойные(внутренние) кавычки не нужны.

Едрит, и точно.

Теперь кто подскажет как лучше выбрать параметры, если медиа инфу я беру с помощью avconv и в переменной будет такой результат

text
avconv version 0.8.9-6:0.8.9-1, Copyright (c) 2000-2013 the Libav developers
  built on Nov  3 2013 00:54:50 with gcc 4.7.2
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/media/sda9/pr/Ben.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 1970-01-01 00:00:00
    encoder         : Lavf52.93.0
  Duration: 00:15:03.67, start: 0.000000, bitrate: 6820 kb/s
    Stream #0.0(eng): Video: h264 (High), yuv420p, 1920x1080 [PAR 1:1 DAR 16:9], 6727 kb/s, 29.97 fps, 29.97 tbr, 2997 tbn, 59.94 tbc
    Metadata:
      creation_time   : 1970-01-01 00:00:00
    Stream #0.1(eng): Audio: aac, 44100 Hz, stereo, s16, 86 kb/s
    Metadata:
      creation_time   : 1970-01-01 00:00:00

Например нужно взять оттуда Video: h264, точней только h264, при этом я конечно же не знаю, может DivX там написано будет.

#351514
"-=Serj=-" написал:
['echo', 'q"we"']

это аналогично шеловскому echo q\"we\"

"mogul82" написал:
Например нужно взять оттуда Video: h264, точней только h264.

да прибудут с тобой регэкспы...

#351515
"Fat-Zer" написал:
да прибудут с тобой регэкспы...

Рег выражения конечно хорошо, Но сначала наверное нужно найти позицию Stream #, взять всю строку эту, разбить по запятым, а потом уже регэкспами. Ушёл делать.

#351516
"mogul82" написал:
Рег выражения конечно хорошо, Но сначала наверное нужно найти позицию Stream #, взять всю строку эту, разбить по запятым

Тогда регэкспы уже и ненужны будут :) Либо, либо.

"Fat-Zer" написал:
-=Serj=- пишет:
['echo', 'q"we"']
это аналогично шеловскому echo q\"we\"

Ага, сам же пример с echo привёл, а то, что с кавычками выхлоп не заметил :)

Войдите или зарегистрируйтесь, чтобы ответить.