2

私はGNU/Linuxとpython2.7.3を使用していますが、これは初めてです。メインのPythonプロセスのブロックを回避するためにコマンドをffmpeg使用するなど、長くインストールされたシステムプロセスを実行しようとしています。Popen()私はそれを機能させることができません。

私の最初の試みはスレッドを使用することでしたが、グラフィカルインターフェイスが適切に機能しないため、少し複雑です(そして、もっと良い方法が必要だと思います)

それからフォークを試してみましたが、それは戦車でハエを殺すようなものです。

今使っPopenてみたところ、インターネットでの使い方についての言及がたくさんありましたが、ちゃんと動かしていないと思います。たぶん私は例を誤解しています。

私はもう試した:

##command is ffmpeg like that works ok
p = subprocess.Popen(command, shell=True)    

私も試しました:

p = subprocess.Popen(command,stdin=PIPE, shell=True)

通常、エラーまたはその後の動作が発生し、コマンドが終了してからメインプログラムが再開します。私は何が欠けていますか?

コマンド部分:

    global vidSource
    global srtSource
    global done
    size = "3"

    font = "/usr/share/fonts/truetype/freefont/FreeSerif.ttf"
    command = 'mencoder ' + '"' + vidSource + '"' + " -oac copy -ovc lavc -lavdopts threads=2 -sub " + "'" + srtSource + "'" + " -subcp -utf8 -font "+ '"'+ font+ '"' + " -subfont-text-scale " + size + " -o " + '"' + vidSource + '2'+'"' 
4

1 に答える 1

2

あなたは良い軌道に乗っているはずです。使用するだけ

p = subprocess.Popen(command)

ドキュメントp.pollで説明されているように、プロセスがで終了したかどうかを確認できます

(セキュリティ上の理由から)使用shell=Trueは推奨されないため、非常に正当な理由がない限り、使用しないようにしてください。

ドキュメントで説明されているように、あなたは引数のリストcommandでなければなりません。長い文字列を作成する場合は、前後を維持しながら文字列に変換するために使用する必要があります(もちろん、モジュールにが必要です)。shlex.split(command)"import shlex

于 2012-09-26T14:16:24.600 に答える