現在、ROS(ロボットオペレーティングシステム)用の一般的な設定ツールを作成しています。POpenでサブプロセスに引数を渡すことができません
最初の2つの列がきちんとした方法rospack list
(システムにインストールされているすべてのパッケージを一覧表示コマンドによる作成にかなり単純です:私はこのようなtreeview
を作成していsubprocess.POpen()
とTkinter
を使用して)開発者が独自のパッケージを作成し、それぞれのワークスペース内にあるものを含めては動作します:
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)
は列が必要な問題のウィットによるトリッキーなものですh rospack depends <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] Error: no package given
を取得していますし、戻り値は常に空のリストであるということです。私はさらに、コマンド自体にros_package
引数を連結しようとしましたが、すべてが無駄になりました。
私の無駄な試みの中で、私は何か奇妙なものを見つけました。 list
とdepends
の両方が実際にはrospack
に渡される引数です。実際にrospack
に電話すると、rospack help
に電話して利用可能な引数を確認するエラーが表示されます。
したがって、これらを分割して、["rospack", "list"]
と["rospack", "depends", "ros_package"]
を2つのPOpen
コールに渡しました。私の驚きのために私は得た
[rospack] Error: no command given. Try 'rospack help' [rospack]
[rospack] Error: no command given. Try 'rospack help'
少なくとも私にとっては、かなり奇妙な動作です。