質問

バックグラウンドでプロセスを開いて操作したいのですが、このプロセスは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)

しかし、それはそれほど良くありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top