无法执行没有这样的文件或目录

问题描述 投票:0回答:3

祝大家圣诞快乐。我在使用 Perl 脚本时遇到了困境。在我的脚本中,我通过系统调用调用另一个程序,但出现此错误:

无法执行“./Classificador/svm_classify”:Analise_de_Sentimentos_mudanca.pl 第 463 行没有此类文件或目录。

我不知道将我的程序放在与被调用程序不同的目录中是否存在问题。

另一个奇怪的是,这个脚本曾经在 Ubuntu 10.10 中正常运行。但现在我已经换成Mint 14了。是不是少了一些库?

致以最美好的祝愿,

蒂亚戈

perl system-calls
3个回答
4
投票

相对路径名

./Classificador/svm_classify
被解释为相对于用户的当前目录,而不是包含 perl 脚本的目录。您需要执行以下操作之一:

  • 用户必须先
    cd
    进入包含perl脚本的目录,然后才能运行它。
  • perl 脚本应调用
    chdir()
    将当前目录设置为存储它的目录。
  • 在脚本中输入绝对路径名,而不是
    ./

1
投票

这个“./Classificador/svm_classify”存在吗? 检查以下内容:

1) 转到该文件所在的目录 - Analise_de_Sentimentos_mudanca.pl

2)运行:

ll Classificador/svm_classify

3)向我们展示结果


0
投票

有时

system()
qx//
无法按预期工作。 例如,如果您编写下一个旨在运行
ulimit
Linux shell 命令的 Perl 脚本:

#!/usr/bin/perl

system("ulimit -Hn");

并运行它,某些操作系统上的脚本失败并出现下一个错误:

Can't exec "ulimit": No such file or directory at ./test.pl line 3

发生这种情况是因为

ulimit
不是命令,而是
bash
内部命令或指令。

当 Perl 发现

system()
尝试执行带有参数的简单命令时,它会应用一些优化并直接通过
exec
运行它,而不是创建子 shell 来执行该命令。不幸的是,在我们的例子中,Perl 脚本失败,因为在用户的环境路径中找不到可执行文件 (
ulimit
)。

有一个简单的技巧可以解决此类问题,并通过在命令末尾添加

;
来强制在子 shell 中运行该命令。所以,下一个脚本将正常工作:

#!/usr/bin/perl

system("ulimit -Hn;");

在这种情况下,Perl 找到一个不能在命令行参数中使用的

;
符号,并按照我们的预期在系统子 shell 中强制运行该命令。

或者,我们可以通过运行以下命令让 Perl 在子 shell 中运行脚本:

system("bash -c 'ulimit -Hn'");

这也会起作用。

© www.soinside.com 2019 - 2024. All rights reserved.