サブプロセスコマンドを非同期に実行して結果を返す関数があります。私は同期動作するように余裕があれば、私はサブプロセスモジュールには、このコールを使用する傾向があり、asyncio.create_subprocess_exec各呼び出しのコンソールウィンドウを開く
import asyncio
async def async_subprocess_command(*args):
# Create subprocess
process = await asyncio.create_subprocess_exec(
*args,
# stdout and stderr must a pipe to be accessible as process.stdout
stdout=asyncio.subprocess.PIPE,
stderr=asyncio.subprocess.PIPE)
# Wait for the subprocess to finish
stdout, stderr = await process.communicate()
#Remove final carriage return from string
stdout_formatted = stdout.decode().strip().replace('\r', '')
stderr_formatted = stderr.decode().strip().replace('\r', '')
# Return stdout and sterr
return stdout_formatted, stderr_formatted
:それはこのようになります
import subprocess
subprocess.getoutput([parameter1,parameter2,parameter3])
私は同期subprocess.getoutput
を呼び出すと(私が呼んでいると仮定すると外部ツール)、コンソールウィンドウは開きません。私がasyncio.create_subprocess_exec
を非同期に呼び出すと(もう一度、私が外部ツールを呼び出していると仮定して)、コンソールウィンドウが呼び出されるたびにポップアップし、非同期呼び出しが完了するまでコンピュータを操作するのが難しくなります。
asyncio.create_subprocess_exec
をコンソールウィンドウがポップアップしないで非同期に呼び出すことはできますか?
プロセス[作成フラグ](https://msdn.microsoft.com/en-us/library/ms684863)を使用してください。あなたは 'creationflags = DETACHED_PROCESS'を通してコンソールを全く割り当てないようにすることができます。代わりに、 'createflags = CREATE_NO_WINDOW'を介してウィンドウを作成しないコンソールを割り当てます。ウィンドウを作成しないという選択肢は無意味に見えるかもしれませんが、プロセスがまだコンソールに接続されているため、いくつかのコンソールアプリケーションとの互換性が向上し、このウィンドウレスコンソールは子プロセスによって継承されます。対照的に、デタッチされたプロセスを使用する場合、子プロセスは新しいコンソールを割り当てます。 – eryksun
この情報をお寄せいただきありがとうございます。私はこれで元の機能を調整し、さらに高速化することができました。 – user3535074