祝大家圣诞快乐。我在使用 Perl 脚本时遇到了困境。在我的脚本中,我通过系统调用调用另一个程序,但出现此错误:
无法执行“./Classificador/svm_classify”:Analise_de_Sentimentos_mudanca.pl 第 463 行没有此类文件或目录。
我不知道将我的程序放在与被调用程序不同的目录中是否存在问题。
另一个奇怪的是,这个脚本曾经在 Ubuntu 10.10 中正常运行。但现在我已经换成Mint 14了。是不是少了一些库?
致以最美好的祝愿,
蒂亚戈
相对路径名
./Classificador/svm_classify
被解释为相对于用户的当前目录,而不是包含 perl 脚本的目录。您需要执行以下操作之一:
cd
进入包含perl脚本的目录,然后才能运行它。chdir()
将当前目录设置为存储它的目录。./
。这个“./Classificador/svm_classify”存在吗? 检查以下内容:
1) 转到该文件所在的目录 - Analise_de_Sentimentos_mudanca.pl
2)运行:
ll Classificador/svm_classify
3)向我们展示结果
有时
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'");
这也会起作用。