呪いを使ってコマンドの出力を取得する

呪いを使ってコマンドの出力を取得する

Pythonプログラムの出力(stdout)を変数に入れようとすると、次のようになります。

set zpath (python something.py "$argv")

ただし、プログラムが呪いインタフェースを生成した場合、表示されません。

プログラムは、何かを選択できる呪いインターフェースを一時的に表示し、プログラムが終了する前に呪いを終了します。有用なデータを標準出力として印刷します。

2>&1 >/dev/ttyコマンドの末尾に追加できると読みました。

これにより、呪いインターフェイスが表示されますが、出力は変数に保存されません。

テストする内容を印刷すると、変数の代わりにシェルに印刷されます。

呪いインターフェイスを動作させ、標準出力キャプチャも動作させるにはどうすればよいですか?

/dev/ttyへのリダイレクトが混乱しているように見えるので、特に簡単な解決策を探しています。

他のシェルで動作するようにする必要があります。

答え1

コマンドの最後に 2>&1 >/dev/tty を追加できることを読みました。

これはstdoutを端末にリダイレクトし、stderrをstdoutが元々あった場所(コマンド代替バッファ)にリダイレクトします。

インターフェイスが表示され、リダイレクトなしで実行してもインターフェイスが表示されない場合、プログラムはstdoutを使用してインターフェイスを表示します。

これは次のことを意味します。

有用なデータを標準出力として印刷します。

この出力は最終的に端末にも到達します。

プログラムがインターフェースを表示するために標準出力でttyを使用しようとしているようです。そしてその後、便利な出力を同じファイル記述子(stdout)で印刷すると、2つを別々にリダイレクトできません。シェルは分離されていないため分離できません。

あなたがする必要があるのは、インターフェースをあるファイル(例:/ dev / tty)に表示し、便利な出力を別のファイル(例えばstdout)に印刷するようにプログラムを変更することです。

これも方法です富士、インタラクティブな端末インターフェイスを開き、標準出力に何かを印刷します。 Unixで実行すると/ dev / ttyが開きます。 - 参照https://github.com/junegunn/fzf/blob/ef67a45702c01ff93e0ea99a51594c8160f66cc1/src/tui/light_unix.go#L50-L63そしてhttps://github.com/junegunn/fzf/blob/b3ab6311c587e18ee202c5205afc658a33f2a23c/src/tui/light.go#L29

あるいは、stdoutにディスプレイを配置し、stderrに役立つ情報を印刷することもできます。これで2>&1 >/dev/ttyトリックが機能します。


注:

zpath設定(python Something.py "$argv")

魚ではおそらくそうです。いいえこれを引用したかったです$argv。複数の引数に設定されている場合、今度は引数を一緒に意味のないものにまとめました。たとえば、Fishはbashのように単語の分離を実行しないため、スペースにも役立ちません。変数がX要素に設定されている場合は、引用符の外側に展開すると、再分割することなくそのX要素に展開されます。

関連情報