Ich bin gerade dabei, ein allgemeines Konfigurationstool für ROS (Robot Operating System) zu erstellen. Mit subprocess.POpen()
und Tkinter
Ich erstelle eine treeview
wie folgt aus:Argument kann nicht an Subprozess übergeben werden mit POpen
Die ersten beiden Spalten sind ziemlich einfach durch die saubere Art und Weise zu erstellen rospack list
(ein Befehl, der alle Pakete aufgelistet, die auf dem System installiert sind diejenigen umfasst, die innerhalb des jeweiligen Arbeitsbereich, wo der Entwickler seine eigenen Pakete erzeugt) funktioniert:
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)
die Benötigt Spalte ist die knifflige Frage, da ein Problem Witz h ruft rospack depends <package>
(listet (falls vorhanden) alle Pakete die <package>
erfordert auf dem System vorhanden sein, um zu bauen und/oder zu laufen). Für jedes Paket, das in ros_packages_installed
ich die folgende Funktion aufrufen, ist:
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
Das Problem ist, dass ich immer
[rospack] Error: no package given
und der Rückgabewert ist immer eine leere Liste. Ich habe sogar versucht, das ros_package
Argument mit dem Befehl selbst zu verketten, aber alles umsonst.
Während meiner vergeblichen Versuche fand ich etwas ziemlich Seltsames. Sowohl list
als auch sind tatsächlich Argumente, die an rospack
übergeben werden. Wenn Sie nur rospack
anrufen, erhalten Sie eine Fehlermeldung, dass Sie rospack help
aufrufen müssen, um die verfügbaren Argumente zu sehen.
Deshalb habe ich versucht, diese Dinge aufzuteilen und ["rospack", "list"]
und ["rospack", "depends", "ros_package"]
an die zwei POpen
Anrufe übergeben. Für meine Überraschung habe ich
[rospack] Error: no command given. Try 'rospack help' [rospack]
[rospack] Error: no command given. Try 'rospack help'
die zumindest für mich ist ein eher seltsames Verhalten.