理解できない理由で、Popen.communicate の出力を端末に出力する以外は何もできません。
出力を変数に保存すると、端末にも出力できるため、変数にはテキストが含まれますが、len は 0 を返し、re.search は何も一致せず、find は常に -1 を返します。
問題のある機能:
#!/usr/bin/env パイソン
# コーディング: utf-8
OS のインポート
システムをインポート
getopt をインポート
サブプロセスのインポート
os.path をインポート
再輸入
def get_video_duration (ifile):
p = subprocess.Popen(["ffprobe", ifile], stdout=subprocess.PIPE)
info_str = p.communicate()[0].decode(sys.stdout.encoding)
print(info_str) # デバッグの場合、ファイルに関する情報が正常に出力されます
duration_start = info_str.find("期間")
# duration_start = "AJDKLAJSL Duration:".find("Duration"), このテストは問題ありませんでした
duration_end = info_str.find("開始", duration_start)
number_start = info_str.find(" ", duration_start, duration_end) + 1
number_end = info_str.find(",", number_start, duration_end)
temp = info_str[開始番号:終了番号].split(":")
return int(temp[0]) * 60 * 60 + int(temp[1]) * 60 + int(temp[2])
さまざまなバリエーションを試しました。.decode() を使用しないように、find を単一の re.search に変更し、各文字を反復して独自の find を実装します (問題は、これには len が必要であり、その特定の string/byte_array に対して len は常に 0 を返すことです)。
これは何らかのバグであるか、文字列のエンコーディングに関して何か間違ったことをしています。正確に何が問題なのかわかりません。どんな助けでも感謝します。
Ubuntu 12.10 64 ビット Python 2.7