gpt4 book ai didi

perl - 如何获取整个命令行字符串?

转载 作者:行者123 更新时间:2023-12-01 11:59:20 26 4
gpt4 key购买 nike

我正在编写一个模仿 gcc 的 perl 脚本。这是我的脚本需要处理来自 gcc 的一些标准输出。处理部分已经完成,但我无法让简单的部分工作:如何将所有命令行参数原样转发到下一个进程(在我的例子中是 gcc)。发送到 gcc 的命令行往往很长,可能包含很多转义序列,我现在不想玩转义游戏,而且我知道在复杂情况下在 Windows 上正确处理它很棘手。

基本上,gcc.pl 一些 crazies\t\\"command line\"" 并且 gcc.pl 必须将相同的命令行转发给真正的 gcc.exe(我使用 Windows)。

我是这样做的:open("gcc.exe $cmdline 2>&1 |") 这样来自 gcc 的 stderr 被馈送到 stdout,我的 perl 脚本处理 stdout。问题是我无法在任何地方找到如何构建 $cmdline

最佳答案

我会使用 AnyEvent::Subprocess :

use AnyEvent::Subprocess;

my $process_line = sub { say "got line: $_[0]" };

my $gcc = AnyEvent::Subprocess->new(
code => ['gcc.exe', @ARGV],
delegates => [ 'CompletionCondvar', 'StandardHandles', {
MonitorHandle => {
handle => 'stdout',
callback => $process_line,
}}, {
MonitorHandle => {
handle => 'stderr',
callback => $process_line,
}},
],
);

my $running = $gcc->run;
my $done = $running->recv;
$done->is_success or die "OH NOES";

say "it worked";

MonitorHandle 委托(delegate)的工作方式类似于重定向,除了您可以选择为每个 stdout 和 stderr 使用单独的过滤器。 “代码”arg 是一个数组引用,表示要运行的命令。

关于perl - 如何获取整个命令行字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3122894/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com