Pythonでスクリプトに配管しながら対話型プログラムを起動できません
-
12-11-2019 - |
質問
私は、定義済みの$EDITOR
または$VISUAL
を呼び出す必要があるPythonスクリプトを持っています。Pythonスクリプトが単独で呼び出されると、ヒッチなしで$EDITOR
を起動できますが、Pythonスクリプトに何かをパイプする瞬間、$EDITOR
は起動できません。今、私はを示すナノを使っています
受信したSIGHUPまたはSIGTERM
解決
何かをプロセスに配管するとき、パイプはそのプロセスの標準入力に接続されています。これは、端末入力がエディタに接続されないことを意味します。ほとんどの編集者はまた、標準入力がターミナル( ISATTY )であるか確認してください。どちらのパイプがないかそれがターミナルではない場合、彼らは始めることを拒否します。nano
の場合、これは含めたメッセージで終了するように見えます:
% echo | nano
Received SIGHUP or SIGTERM
.
標準入力を端末ベースのエディタに渡すことができる場合は、ファイルを介してPythonスクリプトに入力を別の方法で入力する必要があります。
今すぐあなたの質問を明確にしました。
editorprocess = subprocess.Popen([editor or "vi", temppath],
stdin=open('/dev/tty', 'r'))
. 他のヒント
find -type f | vidir -
の特定の場合はここで処理されます:
foreach my $item (@ARGV) {
if ($item eq "-") {
push @dir, map { chomp; $_ } <STDIN>;
close STDIN;
open(STDIN, "/dev/tty") || die "reopen: $!\n";
}
.
Pythonでこの動作を再作成することもできます。
#!/usr/bin/python
import os
import sys
sys.stdin.close()
o = os.open("/dev/tty", os.O_RDONLY)
os.dup2(o, 0)
os.system('vim')
.
もちろん閉じる閉じた標準入力ファイル記述子であるため、エディタを起動した後に再度読み取ってから、閉じる前にファイル記述子を複製する必要があります。
所属していません StackOverflow