터미널 창과의 사용자 상호 작용이 필요한 명령의 출력 (모두 STDOUT
및 STDERR
)을 캡처하고자합니다. 즉, STDIN
을 읽고 STDOUT
에 무엇인가를 인쇄합니다. 내가 Capture::Tiny
를 사용하여 시도터미널에서 사용자 입력이 필요한 명령의 모든 출력을 캡처하는 방법은 무엇입니까?
#! /usr/bin/env perl
use feature qw(say);
use strict;
use warnings;
print "Enter URL: ";
my $ans = <STDIN>;
# do something based on $ans
say "Verification code: AIwquj2VVkwlWEBwway";
say "Access Token: bskjZO8iZotv!";
:
p.pl을
user.pl : 여기
내가의 출력을 캡처 할 스크립트의 최소 버전입니다 :#! /usr/bin/env perl
use feature qw(say);
use strict;
use warnings;
use Capture::Tiny qw(tee_merged);
my $output = tee_merged {
#STDOUT->autoflush(1); # This does not work
system "user.pl";
};
if ($output =~ /Access Token: (.*)$/) {
say $1;
}
하지만 사용자가 터미널에 입력 한 후에야 프롬프트가 표시되기 때문에 작동하지 않습니다.
편집는 :
내가 파이썬 스크립트 user.pl
를 대체 할 경우 잘 작동 보인다.
user.py : 예를 들어
#! /usr/bin/env python3
ans = input('Enter URL: ')
# do something based on $ans
print('Verification code: AIwquj2VVkwlWEBwway')
print('Access Token: bskjZO8iZotv!')
'system "unbuffer user.pl";'(아마도 부모에서'$ | = 1;') – ikegami
@ikegami 제안 해 주셔서 감사 합니다만 불행히도'system "unbuffer user.pl을 사용하면"some " 다른 문제. 프롬프트를 올바르게 표시하지만 입력을 입력하고 Enter 키를 누르면 중단되며 CTRL-C를 사용하여 종료해야합니다. ('sudo apt-get install expect'로'unbuffer' 명령을 먼저 설치해야만했습니다.) –