は抑制サブプロセスのPythonウィンドウでコンソール出力(Tkinterの)アプリ
pyInstallerの-w -F script.py
を使用して作られました:
def ffmpeg_command(sec):
cmd1 = ['ffmpeg', '-f','gdigrab','-framerate',config.get('FFMPEG_Settings','Framerate'),'-i','desktop',gen_filename_from_timestamp_and_extension()]
proc = subprocess.Popen(cmd1,stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
duration = sec
sleeptime = 0
while proc.poll() is None and sleeptime < duration:
# Wait for the specific duration or for the process to finish
time.sleep(1)
sleeptime += 1
proc.terminate()
上記のコードは、Tkinterボタンが押され、このコードがボタンクリックハンドラから呼び出されたときに実行されます。
私の問題は、私がexeを実行しているときにffmpegを実行しないということです。私がするコマンドを設定した場合 はしかし、:FFMPEGを実行しない
proc = subprocess.Popen(cmd1)
、私は私が欲しかったムービーファイルを取得しますが、私はFFMPEGのためのコンソールウィンドウを見ることができます。だから私は映画の中でコンソールウィンドウを取得することになります。 (私はボタンクリックハンドラでTkinterウィンドウを最小限に抑えます)
私の質問はどうやってコンソールウィンドウを抑制し、私が望むようにFFMPEGを実行するのですか? 私は次のスレッドを見て、それを動作させることができませんでした: How to hide output of subprocess in Python 2.7、 Open a program with python minimized or hidden
は@Stackと@eryksun
proc = subprocess.Popen(cmd1、stdout = subprocess.DEVNULL、stderr = subprocess.DEVNULL)にパラメータ** shell = True **を追加してみてください。 – Stack
@Stack - コメントありがとうございます。私はそれを修正しようとしました: 'proc = subprocess.Popen(cmd1、shell = True、stdout = subprocess.DEVNULL、stderr = subprocess.DEVNULL)'しかし、私はまだ同じ結果を得ています:( –
Windows 'stdin = subprocess.DEVNULL'を介して置き換えますが、' NUL'デバイスにハンドルを設定しても、コンソールの割り当てが妨げられたり隠されたりすることはありません 'shell = True 'を指定すると、 'STARTUPINFO'で隠されますが、できるだけシェルを避けて、コンソールには全く接続しない方が簡単です。' DETACHED_PROCESS = 8'を定義し、 'creationflags = DETACHED_PROCESS'を使用してください。 – eryksun