You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Perl 6的run命令在Windows系统上正常工作?

在Windows中使用Perl 6的run命令执行dir失败的解决办法

嘿,我来帮你搞定这个问题!你遇到的执行失败其实是个很典型的Windows系统特性问题:dir并不是一个独立的可执行程序,它是Windows命令提示符(cmd.exe)的内置命令。而Perl 6的run和Proc.spawn方法默认只会直接调用独立的可执行文件,所以直接传dir的话,系统找不到对应的程序,自然就返回退出码1(表示执行失败)了。

下面给你两个修正后的测试代码,都能正常执行dir命令:

方法一:用run通过cmd.exe调用dir

put '-' x 70;
my $p1 = run 'cmd', '/c', 'dir', :out;
put "exit code: {$p1.exitcode}";
put $p1.out.slurp(:close);
put '-' x 70;

这里的/c参数是告诉cmd.exe:执行后面跟的dir命令,执行完成后就退出。这样Perl 6就能正确触发dir命令的执行了。

方法二:用Proc.new+spawn的方式

put '-' x 70;
my $p2 = Proc.new: :out;
$p2.spawn: 'cmd', '/c', 'dir';
put "exit code: {$p2.exitcode}";
$p2.out.slurp(:close).say;
put '-' x 70;

逻辑和第一种方法完全一致,同样需要借助cmd.exe来执行内置的dir命令。

小提示

如果是Windows上的独立可执行程序(比如notepad.exe、ping.exe这类),直接用run或者spawn调用就没问题;但像dir、cd、echo这类cmd专属的内置命令,都必须通过cmd /c的方式来间接调用哦。

内容的提问来源于stack exchange,提问作者brian d foy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:30:46