首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python `invoke`在Windows上不能使用多行命令打印

Python `invoke`在Windows上不能使用多行命令打印
EN

Stack Overflow用户
提问于 2019-02-22 02:09:02
回答 1查看 38关注 0票数 0

在Windows中使用invoke库时,如果命令跨越多行,似乎没有输出输出到终端。下面是一个重现的示例;将其放入tasks.py中。

代码语言:javascript
运行
复制
import invoke

@invoke.task
def test_oneline(ctx):
    ctx.run("pip install nonexistant-package1234")

@invoke.task
def test_multiline(ctx):
    ctx.run(
    """
    pip install nonexistant-package1234
    """
    )

然后,从tasks.py所在目录的命令提示符中,我得到了以下内容:

代码语言:javascript
运行
复制
>invoke test-oneline
Collecting nonexistant-package1234
  Could not find a version that satisfies the requirement nonexistant-package1234 (from versions: )
No matching distribution found for nonexistant-package1234
>
代码语言:javascript
运行
复制
>invoke test-multiline

>

在Linux上做同样的事情(好吧,至少是Linux的Windows子系统)可以按预期工作:

代码语言:javascript
运行
复制
$ invoke test-multiline
Collecting nonexistant-package1234
  Could not find a version that satisfies the requirement nonexistant-package1234 (from versions: )
No matching distribution found for nonexistant-package1234
$

有没有办法在Windows中打印多行命令的输出?

EN

Stack Overflow用户

发布于 2019-02-22 03:36:28

这是我现在使用的技巧,以防其他人在短期内需要绕过这一点。如果我遇到问题,我会回复的;到目前为止,它只经过了最低限度的测试。基本上,如果你在Windows上,我只是把命令写到一个.bat文件中,然后我运行.bat文件(作为一个单行命令)。

代码语言:javascript
运行
复制
import invoke
import platform
from pathlib import Path
from tempfile import TemporaryDirectory


def _fixed_run(ctx, cmd: str, *args, **kwargs):
    if platform.system() != "Windows":
        return ctx._old_run(cmd, *args, **kwargs)

    with TemporaryDirectory() as tmp_dir:
        tmp_file = Path(tmp_dir) / "tmp.bat"
        tmp_file.write_text("@echo off\r\n" + cmd)
        return ctx._old_run(str(tmp_file), *args, **kwargs)

invoke.Context._old_run = invoke.Context.run
invoke.Context.run = _fixed_run

为了方便使用,请将其保存到一个文件中(例如,fix_invoke.py,然后在需要此修复程序时执行import fix_invoke )。

不过,我很高兴听到一个真正的解决方案,如果有人有的话!

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54813582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档