22

Popen 呼び出しを介して外部プログラムを実行する GUI を備えたプログラムがあります。

p = subprocess.Popen("<commands>" , stdout=subprocess.PIPE , stderr=subprocess.PIPE , cwd=os.getcwd())
p.communicate()

しかし、何をしてもコンソールがポップアップします (ファイルハンドルに NUL を渡そうとしました)。コンソールを解放するために呼び出すバイナリを取得せずにそれを行う方法はありますか?

4

5 に答える 5

34

ここから:

import subprocess

def launchWithoutConsole(command, args):
    """Launches 'command' windowless and waits until finished"""
    startupinfo = subprocess.STARTUPINFO()
    startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
    return subprocess.Popen([command] + args, startupinfo=startupinfo).wait()

if __name__ == "__main__":
    # test with "pythonw.exe"
    launchWithoutConsole("d:\\bin\\gzip.exe", ["-d", "myfile.gz"])

コンソールを抑制すると、サブプロセス呼び出しが「エラー 6: 無効なハンドル」で失敗する場合があることに注意してください。stdinここで説明されているように、簡単な修正はリダイレクトすることです: Python running as Windows Service: OSError: [WinError 6] The handle is invalid

于 2009-11-28T21:58:35.383 に答える
-1

あなたはただできるかもしれませんsubprocess.Popen([command], shell=False)

それはとにかく私が使用するものです。フラグやその他の設定のすべてのナンセンスを保存します。.pyw として名前を付けるか、pythonw で実行すると、コンソールは開きません。

于 2009-11-28T23:27:55.933 に答える