私はPythonでRosインタフェースをプログラミングしています。パッケージを選択すると、使用可能なすべてのノードを示すリストから実行したいノードを選択することができます。言い換えればPython get bashダブルタブ補完出力
私が入力した場合、私は私がターミナルでなければならない出力を得るパッケージに含まれるすべてのノードのリストを作成したいと思います:
rosrun <package-name> \t\t
をPythonコードの面では、間違った例
from subprocess import Popen, PIPE
p = Popen (["rosrun", "<package-name>", "\t\t"], stdout = PIPE, stderr = PIPE)
out, err = p.communicate()
print (out.decode ("ascii"))
print (err.decode ("ascii"))
をしかし、それは端末内にあるように「\ T \ T」popenの中で処理されていないので、これは動作しません:私は可能性がやろうとしています何の。
これを実行する方法はありますか、またはPythonスクリプトの内部から端末のダブルタップ補完をエミュレートすることはできませんか?
Popenはこれとは別の方法で使用されますか、他の機能を使用してコードを完全に変更する必要がありますか?
私を助けてください:)
私はこれを行う正しい方法はわかりませんが、私はこのアプローチがうまくいかないことに驚くことはありません。この例では、プロセス 'rosrun'を直接実行し、タブの補完を要求しますが、通常はプログラムを呼び出す前にタブ補完を行うシェルです。もしあなたが 'shell = True'でそれを実行しようとするなら、おそらく。 。 。しかし私はそれを自信がない。 –
はい私は、私が必要とするものだけを説明するためにその例を書いた。いいえ、 'shell = True'は解決しない、私はすでに試してみた... ** pty **について何か読んでいるが、私はそれが何であるか分からない。 –
あなたが望むものをたくさんするかもしれないこの質問をチェックしてください:http://stackoverflow.com/q/9137245/4687135 –