0

またはstdoutなどのコンソール GUI を起動するインタラクティブな Python スクリプトを使用して、を引き継ぐ場合。いくつかのアクションを実行してループを閉じた後、で印刷されたパスに移動するにはどうすればよいですか?cursesurwidcdstdout

例えば、

import sys
import urwid

def check_for_q(key):
    if key in ('q', 'Q'):
        raise urwid.ExitMainLoop()

txt = urwid.Text(u"Thanks for helping")
fill = urwid.Filler(txt, 'top')
loop = urwid.MainLoop(fill, unhandled_input=check_for_q)
loop.run()

sys.stdout.write('/usr/bin')

q実行時にまたはを押してループQを終了する場合:urwid

(py27) $ python curses_script.py

/usr/bin

(py27) $

これが にのみ出力する単純な python スクリプトであればstdoutcd $(python simple_script.py). ただし、上記の場合、python サブシェルがstdout入力のハイジャックと処理に失敗するため、これはハングします。

ファイルに書き込まずにこれを回避することは可能ですか?

4

1 に答える 1

0

いくつかのバッシュブラックマジックを行う代わりに、これはかなり簡単に達成でき、これは実用的なソリューションです

temp_file=$(mktemp /tmp/curses_script.XXXXXX)
python curses_script.py temp_file
# write to temp file in script...
cd $(cat temp_file)
rm $temp_file
于 2016-10-30T18:08:08.637 に答える