perl 系统调用无法识别路径
Posted
技术标签:
【中文标题】perl 系统调用无法识别路径【英文标题】:perl system call won't recognize paths 【发布时间】:2012-07-17 23:39:08 【问题描述】:我正在尝试从 perl 程序执行系统命令。
除非我提供路径,否则它工作正常,当它说“系统找不到指定的路径。”
我使用 exec()、system() 或反引号得到相同的结果。
我将命令字符串直接作为参数得到相同的结果,或者将其放在单引号或双引号字符串中并将字符串作为参数传递。
如果我从 perl 脚本中复制一个不起作用的命令并将其粘贴到 DOS 框中,它会起作用,反之亦然。
例如,
print `cd`;
工作正常,但是
print `cd \`;
和
print `cd ..`;
给我同样的错误信息。
$cmd = 'foo.htm'; $ret=`$cmd`
启动浏览器,但是
$cmd = '\foo.htm'; $ret=`$cmd`;
没有。
有人对可能出现的问题有什么建议吗?
【问题讨论】:
【参考方案1】:如果您告诉我们您的系统命令是什么以及您得到了什么,那将会很有帮助。很难说你的错误是什么。但是,我会猜一下..
如果您在 Windows 上,并且正在执行 \
,您必须了解反斜杠字符是 Perl 上的特殊 引号字符。要使用真正的反斜杠,您需要将其加倍:
system ("C:\\Program Files (x86)"\\Microsoft Office\\Word.exe");
或者,更好的是,使用 Perl 附带的 File::Spec 模块。这将保证您制作正确的路径结构:
use File::Spec::Functions;
my $executable = catfile("C:", "Program Files (X86)",
"Microsoft Office", "Word.exe");
system ($executable);
当然,你应该尝试捕获system
命令的输出,看看有没有错误:
my $error = system($executable);
if ($error)
if ($? == -1)
print "Program failed to execute\n";
else
my $signal = ($? & 127);
my $exit_code = ($? >> 8);
print "Error: Signal = $signal Exit Code = $exit_code\n";
【讨论】:
以上是关于perl 系统调用无法识别路径的主要内容,如果未能解决你的问题,请参考以下文章