ユーザーとパス情報(例: "guest:〜/home / guest $")印刷とコマンド出力の間に異なるメカニズムがあるかどうか疑問に思います。
"bash"のstdinとstdoutをパイプしようとすると、コマンド出力のみが得られ、ユーザーとパス情報は取得できません。
self.p = Popen(["bash", "-i"], bufsize=1, stdin=PIPE, stdout=PIPE)
self.p.stderr = self.p.stdout
self.t = Thread(target=self.listen_stdout)
self.t.daemon = True # thread dies with the program
self.t.start()
def listen_stdout(self):
while True:
c = self.p.stdout.read(1)
print c,
上記のコードを実行して作成すると、ls
フォルダself.p.stdin
の内容だけが印刷されますguest:~/home/guest$
。
ssh
と同じパスワードプロンプトですsudo
。
私は何を見逃していますか?どんなアイデアがありますか?
答え1
bash
インタラクティブモードとバッチモードがあります。 stdin が端末かどうかに応じてそのモードに入ります。
bash # interactive
cat|bash # non-interactive: stdin is a pipe not a terminal
cat|bash -i # explicitly request interactive mode
インタラクティブモードでは、bash
プロンプト(PS1変数で設定可能)が印刷され、その他はユーザーフレンドリーな環境に設定されます。
man bash
これらのモード間のすべての違いを確認するには、「インタラクティブ」を読んで参照してください。