python - invoke.context.Context 为缺少位置参数给出了一个奇怪的错误
问题描述
我正在尝试在上下文管理器中更改我的 python 程序中的目录。usinginvoke.context.Context
似乎是正确的方法,从 Fabric 文档中获得并且使用常规with os.chdir
将不起作用。
但是,当我尝试做一些事情时,例如
from invoke import Context
with Context.cd("/etc"):
subprocess.run(["ls"])
我收到一条错误消息:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-2-40b28af3213a> in <module>
----> 1 with Context.cd("/etc"):
2 subprocess.run(["ls"])
3
~/miniconda3/envs/python3/lib/python3.7/contextlib.py in helper(*args, **kwds)
237 @wraps(func)
238 def helper(*args, **kwds):
--> 239 return _GeneratorContextManager(func, args, kwds)
240 return helper
241
~/miniconda3/envs/python3/lib/python3.7/contextlib.py in __init__(self, func, args, kwds)
80
81 def __init__(self, func, args, kwds):
---> 82 self.gen = func(*args, **kwds)
83 self.func, self.args, self.kwds = func, args, kwds
84 # Issue 19330: ensure context manager instances have good docstrings
TypeError: cd() missing 1 required positional argument: 'path'
该文档使这看起来是正确的(http://docs.pyinvoke.org/en/latest/api/context.html#invoke.context.Context),但我有点迷失了。
任何建议都是有帮助的。
解决方案
查看文档,您似乎应该创建自己的实例Context
,而不是直接使用Context
该类。
他们还使用run()
Context 实例上的方法而不是subprocess.run()
.
尝试这个:
from invoke import Context
c = Context()
with c.cd("/etc"):
c.run("ls")
推荐阅读
- javascript - 窗口模糊时将页面标题更改为动态标题
- android - Android自适应图标前景总是太大
- r - R Simmer Timeout 使用 Rescale 随机生成的函数没有变化
- php - Prestashop 1.7 模块前端控制器 404
- android - 如何使用 retrofit2 Kotlin 解析响应
- java - 用完堆内存尝试在 Java 中将单个字符推送到堆栈
- recursion - 如何为 SPARK 中的递归函数制作前置和后置条件?
- angular - 使用 SSR 运行 Angular 并使用 https 提供页面
- laravel - 根据条件 Laravel 8 将登录重定向到不同的路由
- python - 在 VScode 中将 tradingview 的 pine 脚本转换为 python