38

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

4 に答える 4

38

1行減らすことができます:)

startupinfo = None
if os.name == 'nt':
    startupinfo = subprocess.STARTUPINFO()
    startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
proc = subprocess.Popen(command, startupinfo=startupinfo)
于 2009-06-19T06:48:07.477 に答える
12

注意: Python 2.7subprocess._subprocess.STARTF_USESHOWWINDOWの場合、の代わりに使用する必要がありsubprocess.STARTF_USESHOWWINDOWます。

于 2010-08-09T18:49:16.710 に答える
4

私はあなたがあなたがしたことよりもはるかに簡単になることができるかどうかわかりません。あなたはおそらく5行のコードを最適化することについて話している。お金のために、私は自分のプロジェクトに取り掛かり、これをクロスプラットフォーム開発の結果として受け入れます。頻繁に行う場合は、ロジックをカプセル化してインポートするための特殊なクラスまたは関数を作成します。

于 2009-06-19T05:00:22.640 に答える
1

コードを次のように変換できます。

params = dict()

if os.name == 'nt':
    startupinfo = subprocess.STARTUPINFO()
    startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
    params['startupinfo'] = startupinfo

proc = subprocess.Popen(command, **params)

しかし、それはそれほど良いことではありません。

于 2009-06-19T06:38:02.813 に答える