0
またはurwid
などのコンソールGUIを起動する対話型Pythonスクリプトを使用してstdout
を引き継ぎます。いくつかのアクションとループを閉じた後、どのように私はstdout
に印刷されたパスにcd
することができますか?例えば対話型のPythonアプリケーションからstdoutをcdコマンド(サブシェル?)
、
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')
実行、およびurwid
ループを終了しq
またはQ
を押す:
(py27) $ python curses_script.py
/usr/bin
(py27) $
これが唯一のstdout
に印刷されたシンプルなPythonスクリプトだった場合、私は可能性がありcd $(python simple_script.py)
。しかし、上記の場合、これはpythonサブシェルがstdout
をハイジャックして入力を処理するのに失敗するため、ハングします。
ファイルに書き込まずにこの問題を回避することはできますか?
実用的なソリューションです。 bashスクリプトは、一時ファイルまたは名前付きパイプを作成し、このファイルのパスをコマンドライン引数としてPythonスクリプトに送り、Pythonスクリプトの終了時にファイルを読み込んで削除します。 – jme
@jme私はむしろ一時ファイルの作成と後でそれを削除することに頼るのを避けるでしょう。私は以前に名前付きパイプを使ったことがなく、それらを調べます。説明する例は素晴らしいでしょう! – Kappers
なぜ一時ファイルの作成を避けたいですか?このようにファイルを使用することは、Unixの考え方と一貫しています。さらに、名前付きパイプは本質的にファイルです(このサイトで使用する例がいくつかあります)。 – jme