ホームページ  >  記事  >  バックエンド開発  >  os.system() と subprocess.call() の使用時にコンソール ウィンドウがポップアップしないようにするにはどうすればよいですか?

os.system() と subprocess.call() の使用時にコンソール ウィンドウがポップアップしないようにするにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-19 04:53:03247ブラウズ

How to Prevent Console Windows from Popping Up When Using os.system() and subprocess.call()?

os.system() および subprocess.call() でコンソール ウィンドウを非表示にする

os.system() または subprocess.call を使用する場合() コマンドを実行すると、煩わしいコンソール ウィンドウがポップアップ表示される場合があります。これにより、ワークフローが中断され、スクリプトがプロフェッショナルではないように見える可能性があります。幸いなことに、この望ましくない動作を抑制する方法があります。

コンソール ウィンドウを非表示にするには、subprocess モジュールで使用できる STARTUPINFO 構造体を利用できます。その方法は次のとおりです:

si = subprocess.STARTUPINFO()
si.dwFlags |= subprocess.STARTF_USESHOWWINDOW
#si.wShowWindow = subprocess.SW_HIDE # default
subprocess.call('taskkill /F /IM exename.exe', startupinfo=si)

または、特定の作成フラグを設定して、最初からコンソール ウィンドウが作成されないようにすることもできます:

CREATE_NO_WINDOW = 0x08000000
subprocess.call('taskkill /F /IM exename.exe', creationflags=CREATE_NO_WINDOW)

これらのアプローチでも、結果は次のようになります。 I/O 用のハンドルを備えたコンソール プロセスですが、非表示になり、ユーザー インターフェイスに干渉しません。

詳細については、解決策として、子プロセスにコンソールをまったく持たせないように強制できます:

DETACHED_PROCESS = 0x00000008
subprocess.call('taskkill /F /IM exename.exe', creationflags=DETACHED_PROCESS)

この場合、子の標準ハンドルは 0 になりますが、subprocess.DEVNULL のようなファイルまたはパイプにリダイレクトできます。 .

以上がos.system() と subprocess.call() の使用時にコンソール ウィンドウがポップアップしないようにするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。