2

重複の可能性:
コンソールなしで Popen を使用して pythonw でプロセスを実行する
Python (2.7) で生成されたプロセスから Windows コンソールを削除するにはどうすればよいですか?

私は Python 2.7 を使用しており、IDLE 内から Python スクリプトを実行しています。

私が実行しているコマンドは、簡単なタスクを実行する単純な exe です。私が抱えている問題は、外部コマンドが Python 内から呼び出されるたびにコンソールが作成され、それが画面上で点滅してフォーカスされるため、さまざまなスクリプトの実行中に PC を使用できなくなることです。

Python 内からそれらを呼び出す方法の例は次のとおりです。

result = call(["Commands\Set.exe", str(i), ARG2])
check_output(["Commands\Read.exe", ARG2])

以下を追加して出くわした解決策を探しています

shell=True

次のコマンドを作成します

check_output(["Commands\Read.exe", ARG2], shell=True)

ただし、外部コマンドが呼び出されるたびにコンソールが表示されます

4

2 に答える 2

4

ここには 2 つの問題があるかもしれません。まず、Python スクリプトに .pyw 拡張子が付いている場合、それらはコンソールを使用しない pythonw に関連付けられます*。ただし、コンソールを生成する shell=True があります*。プログラムを実行してコンソールを非表示にする必要があります。

import subprocess
proc = subprocess.Popen('hello.py',  creationflags=subprocess.SW_HIDE, shell=True)
proc.wait()

*念のため、これは DOS プロンプトではなく、コンソール ウィンドウです。DOS - ディスク オペレーティング システム - は IBM メインフレーム OS でした。MS-DOS または PC-DOS コマンド ライン機能は、cmd.exe (Windows シェル) によって (多くの追加機能と共に) ミラーリングされました。これはコンソール プログラムであり、コンソール ウィンドウを使用します。非表示にする必要があるのは、そのコンソール ウィンドウです。

于 2012-04-05T09:00:37.467 に答える
2

クラスのコンストラクターstartupinfoのパラメーターを使用する必要があります。subprocess.Popen()

startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
startupinfo.wShowWindow = subprocess.SW_HIDE
subprocess.Popen(command, startupinfo=startupinfo)

コンソール ウィンドウを非表示にするだけの場合は必要ありませんこの回答shell=Trueを参照してください。

于 2012-10-22T22:08:33.783 に答える