理解できない理由で、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