gpt4 book ai didi

python - communicate() 和 .stdin.write、.stdout.read 或 .stderr.read 之间的区别 - python

转载 作者:太空宇宙 更新时间:2023-11-03 13:04:03 24 4
gpt4 key购买 nike

我想在 3 个命令之间创建一个管道:

cat = subprocess.Popen("cat /etc/passwd", stdout=subprocess.PIPE)
grep = subprocess.Popen("grep '<usernamr>'", stdin=cat.stdout, stdout=subprocess.PIPE)
cut = subprocess.Popen("cut -f 3 -d ':'", stdin=grep.stdout, stdout=subprocess.PIPE)
for line in cut.stdout:
# process each line here

但是 python 文档说:

Use communicate() rather than .stdin.write, .stdout.read or .stderr.read to avoid deadlocks due to any of the other OS pipe buffers filling up and blocking the child process.

那我该如何使用cut.stdout呢?有人可以解释文档吗?

最佳答案

communicate旨在防止无论如何都不会在您的应用程序中发生的死锁:它主要用于同时 stdin 的情况。和 stdoutPopen 上对象是管道到调用进程,即

subprocess.Popen(["sometool"], stdin=subprocess.PIPE, stdout=subprocess.PIPE)

在您的情况下,您可以安全地从 cut.stdout 读取.您可以使用 communicate如果您觉得方便,但没必要。

(注意 subprocess.Popen("/etc/passwd") 没有意义;您似乎忘记了 cat 。另外,不要忘记 shell=True 。)

关于python - communicate() 和 .stdin.write、.stdout.read 或 .stderr.read 之间的区别 - python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9886654/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com