如何启动并自动向软件控制台提供命令?

问题描述 投票:0回答:1

这似乎是一个已经被问到的问题,但我发现这是一个罕见且仍然是一个悬而未决的问题。我的问题取决于 Vivado 控制台,但它不仅仅与 Vivado 控制台相关,可以有任何其他控制台(仅将 Vivado 控制台视为示例)。如果已经有可用的解决方案,我很乐意重定向到那里。

目标:

我的目标是使用 tcl 命令构建 vivado 项目。

我有所有可用 tcl 命令的列表,我可以在 vivado 控制台中非常轻松地运行这些命令。在vivado控制台中有两种方法可以做到这一点:

方法一:

  1. 启动命令提示符
  2. 运行以下命令启动 vivado 控制台
vivado -mode tcl
  1. 一一运行 tcl 命令,例如:
set project_name "VIV_Project"
set user_project_dir C:/viv
create_project -force $project_name $user_project_dir/projects -part xczu11
  1. 我可以继续执行所有命令,直到执行最后一个命令。
exit

方法二:

现在还有另一种方法,即将所有这些命令放入一个 tcl 脚本 (tcl_script.tcl) 中,然后运行一个命令来构建整个项目,如下所示:

  1. 启动命令提示符
  2. 运行以下命令启动 vivado 控制台(批处理模式)并运行脚本中的所有命令:
vivado -mode batch -source tcl_script.tcl
  1. 等待脚本完成执行

现在的技巧部分是“我不想向任何人授予 tcl 命令的访问权限”。我想让它们隐藏起来。如果我选择方法 1,则需要在 vivado 控制台上手动输入命令,因此我的 tcl 命令对最终用户开放。

如果我选择方法 2,我的命令可在 tcl 脚本中使用,该脚本在目录中也可用。 Vivado 控制台不支持损坏的 tcl 脚本,所以我也不能这样做。

我愿意接受关于如何在没有人知道的情况下仍然执行我的 tcl 命令的建议? 理想情况下,我想要一个可执行文件,用户只需单击即可运行所有命令,然后退出。

实验:

我尝试了以下实验,导致在这里提出这个问题:

实验一:

我可以创建perl脚本的可执行文件,所以我尝试使用perl脚本

system()
命令:

system(vivado -mode tcl);
system(set project_name "VIV_Project");
system(set user_project_dir C:/viv);
system(create_project -force $project_name $user_project_dir/projects -part xczu11);
system(exit);

我期待它启动 vivado 控制台,然后我认为下一行会将命令发送到 vivado 控制台。如果一切都按照计划进行,那么我可以构建 Perl 脚本的可执行文件,并且用户可以启动该可执行文件。

现在此方法的问题是

system(vivado -mode tcl);
命令永远不会退出。它启动 vivado 控制台并停留在那里等待输入命令。

实验2: 我尝试使用批处理脚本来运行 vivado 控制台,然后再次遇到同样的问题,一旦启动 vivado,批处理脚本就会等待它返回。

这让我想到了我在标题中提出的问题(所以我将在这里讨论细节):

如何启动并自动向软件控制台发送命令?

原始问题的详细信息:

我正在使用 perl 脚本通过

system()
运行命令。

  1. 我想使用某些环境(perl 或其他任何环境)启动 vivado 控制台,我最终可以创建其可执行文件。
  2. 然后我想从该环境向 vivado 控制台发出命令。当前 Perl 方法的问题是
    system(vivado -mode tcl);
    命令启动 vivado 但它永远不会返回,同时 vivado 控制台正在等待一些命令。

那么我如何使用环境(perl 或其他东西)来启动 vivado 控制台,然后向该控制台提供命令?

另外,我愿意接受有关如何保护我的 tcl 脚本的建议?我这里只提供了一种方法。

谢谢

perl console command system vivado
1个回答
0
投票

在我的脑海中,25 年前在“C”中做过类似的事情,我认为你想使用

open()
一系列带有管道的函数,这样你就可以
print()
命令到打开的连接句柄。请参阅 https://perldoc.perl.org/functions/open#Opening-a-filehandle-into-a-command

© www.soinside.com 2019 - 2024. All rights reserved.