バックグラウンドでプロセスを開いて操作したいのですが、このプロセスは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._subprocess.STARTF_USESHOWWINDOW
の代わりに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)
しかし、それはそれほど良くはありません。