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

标签 python python-2.7 pip popen

我想记录 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/

相关文章:

python3 + Pandas 样式 + 更改交替行颜色

python - 如何从本地 python 包索引安装包?

python - 调试二进制搜索

使用curses后python print 无法正常运行

类中的 Python 方法

python - Python 3 中的类对象/实例是否通过引用传递?

python - 如何要求用户输入以使代码具有交互性

python: 无法打开文件 get-pip.py 错误 2] 没有这样的文件或目录

python - 运行 setup.py 时以 '\xff' 开头的非 UTF-8 代码

python - pylint 人类可读消息 ID 列表?