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 系统调用无法识别路径的主要内容,如果未能解决你的问题,请参考以下文章

Qt软件开发_解决中文路径无法识别问题

Qt软件开发_解决中文路径无法识别问题

Qt软件开发_解决中文路径无法识别问题

Perl系统调用mplayer,视频之间的过渡不同

如何在远程主机上调用 perl 子例程(可能通过系统命令)?

c++程序中,无法识别中文路径怎么办