python - 如何使用初始输入作为 SCons Phony 目标调用交互式 shell?
问题描述
在实现自定义 SCons 工具链时,我遇到了需要调用 shell 作为Phony目标并且已经提供初始输入的情况,因此我可以继续为已经调用的命令提供输入。
基本上,我想要的是声明具有所需行为的Phony目标:
# ...
def invoke_shell(target, source, env):
initial_input = '...'
# Some steps to interactive command with already provided initial_input
shell = env.Command(Alias('some-shell'), [],
invoke_shell)
env.AlwaysBuild(shell)
我尝试的是编写以下SConstruct文件来覆盖没有初始输入的案例:
# ...
def invoke_yosys(target, source, env):
return 'yosys'
yosys_shell = env.Command(Alias('yosys-shell'), [],
invoke_yosys)
env.AlwaysBuild(yosys_shell)
所以当我调用时,scons -Q yosys-shell
我应该得到 Yosys shell,但一般情况下它可以是任何交互式命令。我期望的是交互式调用shell,即我可以输入命令,而Yosys shell 将在提供输入的同时交互式地执行命令。但它不起作用。它立即退出,就像stdin
映射到/dev/null
.
解决方案
您不想使用 Command() ,因为它被推迟到树遍历,您希望它在构建的其余部分之前立即运行,对吗?
您想在命令行上检测目标,然后使用 Execute() 或 os.system() 触发命令。
有关获取命令行目标的信息,请参见此处。
推荐阅读
- javascript - 此表格如何提交?
- sql - 选择一个或另一个名称,但不要选择第三个 - SQL Oracle
- google-apps-script - 谷歌工作表应用程序脚本 Getvalues() 得到错误的值
- excel - 复制 ColB 中每个单元格大于 0 的行
- java - Matlab 引擎:许可证检出失败
- plsql - 在 PLSQL 中使用转义码在 EPSON FX-890IIN 上打印 Code 39 条码
- android - GoogleFit SensorsApi 支持哪些设备连接?
- python - 在 OSX 11.2.3 Big Sur 上为 python2 安装 sasl 时出错
- python - 在递归函数中获取生成器的结果
- sql-server - SSRS 按列名排序矩阵