【发布时间】:2018-01-26 10:41:31
【问题描述】:
我目前正在研究为 ROS(机器人操作系统)创建通用配置工具。使用subprocess.POpen() 和Tkinter 我正在创建一个treeview,如下所示:
由于rospack list 的简洁方式,前两列的创建相当简单(该命令列出了系统上安装的所有包,包括开发人员在其中创建自己的包的相应工作区中的包)作品:
ros_packages_install_retrieve = subprocess.Popen(["rospack list"], shell=True, stdout=subprocess.PIPE)
ros_packages_installed = []
for ros_package in ros_packages_install_retrieve.stdout.readlines():
ros_package_adapted = ros_package.split(" ")
ros_package_adapted[1] = ros_package_adapted[1][:-1]
ros_packages_installed.append(ros_package_adapted)
Requires 列是一个棘手的列,因为调用 rospack depends <package> 时出现问题(列出(如果有)<package> 需要在系统上存在的所有包,以便构建和/或运行)。对于ros_packages_installed 中的每个包,我调用以下函数:
def get_deps(ros_package):
ros_package_deps_retrieve = subprocess.Popen(["rospack", "depends", ros_package], shell=True, stdout=subprocess.PIPE)
ros_package_deps = []
for ros_package_dep in ros_package_deps_retrieve.stdout.readlines():
ros_package_dep = ros_package_dep.split("\n")
ros_package_dep = ros_package_dep[:-1]
ros_package_deps.append(ros_package_dep)
return ros_package_deps
问题是我得到了
[rospack] 错误:没有给出包
并且返回值始终是一个空列表。我什至尝试将ros_package 参数连接到命令本身,但都是徒劳的。
在我徒劳的尝试中,我发现了一些相当奇怪的东西。 list 和 depends 实际上都是传递给 rospack 的参数。事实上,如果你只调用 rospack,你会得到一个错误,告诉你调用 rospack help 来查看可用的参数。
因此,我尝试将这些东西分开并将["rospack", "list"] 和["rospack", "depends", "ros_package"] 传递给两个POpen 调用。令我惊讶的是,我得到了
[rospack] 错误:没有给出命令。试试 'rospack help' [rospack]
[rospack] 错误:没有给出命令。试试“rospack 帮助”
这至少对我来说是一种相当奇怪的行为。
【问题讨论】:
标签: python arguments subprocess popen ros