隠されたウィンドウを持つクロスプラットフォームのサブプロセス
-
06-07-2019 - |
質問
バックグラウンドでプロセスを開いて操作したいのですが、このプロセスはLinuxとWindowsの両方で非表示にする必要があります。 Windowsでは、STARTUPINFOを使用していくつかの処理を行う必要がありますが、これはLinuxでは無効です。
ValueError:startupinfoはWindowsプラットフォームでのみサポートされています
OSごとに個別のPopenコマンドを作成するよりも簡単な方法はありますか?
if os.name == 'nt':
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
proc = subprocess.Popen(command, startupinfo=startupinfo)
if os.name == 'posix':
proc = subprocess.Popen(command)
解決
1行減らすことができます:)
startupinfo = None
if os.name == 'nt':
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
proc = subprocess.Popen(command, startupinfo=startupinfo)
他のヒント
注: Python 2.7 の場合、 subprocess.STARTF_USESHOWWINDOW
ではなく subprocess._subprocess.STARTF_USESHOWWINDOW
を使用する必要があります。
あなたがやったことよりもずっと簡単にできるかどうかはわかりません。あなたはおそらく5行のコードを最適化することについて話している。お金のために、私は自分のプロジェクトに取り掛かり、これをクロスプラットフォーム開発の結果として受け入れます。頻繁に行う場合は、ロジックをカプセル化してインポートする特別なクラスまたは関数を作成します。
コードを次のように変換できます:
params = dict()
if os.name == 'nt':
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
params['startupinfo'] = startupinfo
proc = subprocess.Popen(command, **params)
しかし、それはそれほど良くありません。
所属していません StackOverflow