gpt4 book ai didi

Python:with open 第二次不读取任何内容

转载 作者:太空宇宙 更新时间:2023-11-04 10:18:25 25 4
gpt4 key购买 nike

我想记录 pip show 命令的返回,并识别包的版本(例如 pytest)。如果存在另一个日志,则应将其覆盖。

所以我决定将pip show命令写在一个文件中,然后以读取模式重新打开它来解析它。如果我没有在 for 循环行上放置断 pip ,则第二个 open 不会读取任何内容。

我使用了两个不同的文件名,甚至在实际阅读之前做了一个seek(0)...

# checking the installed package version using pip. Writing to file for further use
with open("lib_install.log", "w") as pip_log:
subprocess.Popen(["pip", "show", "pytest"], stdout=pip_log, stderr=pip_log)

# Lets retrieve the log and parse for the version
current_version = "not installed properly"
with open("lib_install.log", "r") as pip_log_read:
pip_log_read.seek(0)
for line in pip_log_read.readlines():
if "Version: " in line:
current_version = line.strip("Version: ")
break

你们有什么想法吗?

顺便说一下,如果你知道我如何在没有 Popen 的情况下使用 pip,我会洗耳恭听。

最佳答案

由于您使用的是 Popen,您的主线程将继续执行,因此它是不确定的,可能会在 pip 命令完成之前执行。

with open("lib_install.log", "w") as pip_log:
subprocess.Popen(["pip", "show", "pytest"], stdout=pip_log, stderr=pip_log)

current_version = "not installed properly" # This will not necessarily be
# executed after the Popen is done.

使用 subprocess.call 或使用 wait Popen 返回对象的方法。

with open("lib_install.log", "w") as pip_log:
p = subprocess.Popen(["pip", "show", "pytest"], stdout=pip_log, stderr=pip_log)
p.wait()

关于Python:with open 第二次不读取任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33807594/

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