gpt4 book ai didi

python - 依次执行python命令和shell命令(使用子进程)

转载 作者:行者123 更新时间:2023-11-30 23:36:17 25 4
gpt4 key购买 nike

我对 python 命令和 shell 命令(来自子进程)的执行顺序感到困惑。

例如,我有一个简单的代码:

import subprocess
import shlex

command="echo 'test'"
arg=shlex.split(command)

with open("out.txt", "w") as f:
f.write("line1\n")
subprocess.call(arg, stdout=f)
f.write("line3\n")

我期望 out.txt 是:

line1
test
line3

然而,实际的out.txt是:

test
line1
line3

有人能解释一下原因吗?谢谢。

最佳答案

显然,Python 的文件对象在将输出写入底层文件描述符(通过 write() 系统调用)之前会执行一些缓冲。因此,line1 最终位于缓冲区中,但尚未写入文件。子进程继承尚未写入的文件描述符,写入行test,然后Python将line3写入其缓冲区,最后刷新line1line3 到文件描述符。

要解决此问题,请在调用子进程之前刷新文件:

f.write("line1\n")
f.flush()
subprocess.call(arg, stdout=f)
f.write("line3\n")

关于python - 依次执行python命令和shell命令(使用子进程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16635655/

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