、私は簡単でパイプラインを作成し、別のプロセスのに標準に一つのプロセスのうち標準を接続することができますUNIXシェルは|
との接続のコマンドを実行しますと同じ方法:接続2つのプロセスは(asyncio.subprocess.create_subprocess_execで開始)古い学校<code>subprocess.Popen()</code> APIを持つ2つのプロセスを起動すると
asyncio.subprocess.create_subprocess_exec()
(または類似)から非同期APIを使用しているとき、私は同じことを達成することができますどのように from subprocess import Popen, PIPE
process_1 = Popen(['ls'], stdout = PIPE)
process_2 = Popen(['wc'], stdin = process_1.stdout)
process_1.wait()
process_2.wait()
? (真である)
from asyncio.events import get_event_loop
from asyncio.subprocess import PIPE, create_subprocess_exec
async def main():
process_1 = await create_subprocess_exec('ls', stdout = PIPE)
process_2 = await create_subprocess_exec('wc', stdin = process_1.stdout)
await process_1.wait()
await process_2.wait()
get_event_loop().run_until_complete(main())
しかしcreate_subprocess_exec()
への2回目の呼び出しはstdin
に渡された引数が何fileno
を持っていないと文句を言い::これは私が試したものです
Traceback (most recent call last):
File ".../test-async.py", line 11, in <module>
get_event_loop().run_until_complete(main())
[...]
File ".../test-async.py", line 6, in main
process_2 = await create_subprocess_exec('wc', stdin = process_1.stdout)
[...]
File "/opt/local/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/subprocess.py", line 1388, in _get_handles
p2cread = stdin.fileno()
AttributeError: 'StreamReader' object has no attribute 'fileno'
私は同じ結果を得ることができますどのように上の同期の例では?
関連しない: 'popen(['wc']、..)'の後に 'process_1.stdout.close()'を追加するべきです。 [サブプロセスを使用して複数のプロセスをパイプで接続するにはどうすればいいですか?](http://stackoverflow.com/q/295459/4279) – jfs