gpt4 book ai didi

python - 为什么不在 Python 的 subprocess.Popen 中使用 `shell=True`?

转载 作者:IT王子 更新时间:2023-10-29 01:02:16 25 4
gpt4 key购买 nike

<分区>

我有一个很长的单行 shell 命令要由 Python 调用。代码是这样的:

# "first way"
def run_cmd ( command ):
print "Run: %s" % command
subprocess.call (command, shell=True)
run_cmd('''sort -n -r -k5 {3} |head -n 500|awk 'OFS="\t"{{if($2-{1}>0){{print $1,$2-{1},$3+{1},$4,$5}}}}' > {2}'''.format(top_count,extend/2,mid,summit))

这些代码有效,但它总是这样提示:

sort: write failed: standard output: Broken pipe
sort: write error
awk: (FILENAME=- FNR=132) fatal: print to "standard output" failed (Broken pipe)

根据 a previous answer ,我需要使用更长的脚本来完成它,例如:

# "second way"
p1 = Popen("sort -n -r -k5 %s"%summit, stdout=PIPE)
p2 = Popen("head -n 500", stdin=p1.stdout, stdout=PIPE)
# and so on ..........

我的问题是:

(1)“第二种方式”是否会比“第一种方式”慢

(2) 如果我无论如何都必须以“第一种方式”编写(因为这样写起来更快),我怎样才能避免像 broken pipe

这样的提示

(3) 我不应该以“第一种方式”写作的最令人信服的理由是什么

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