Eclipse Perl在调试器中或作为Win32::Daemon时不执行命令 提要
我从Perl执行一个shell命令,当从命令行运行时,它可以工作,但当在调试器中运行时,它不工作。将其作为Win32::Daemon运行会显示相同的行为 源代码 我用反勾号执行命令Eclipse Perl在调试器中或作为Win32::Daemon时不执行命令 提要,eclipse,perl,activeperl,epic,Eclipse,Perl,Activeperl,Epic,我从Perl执行一个shell命令,当从命令行运行时,它可以工作,但当在调试器中运行时,它不工作。将其作为Win32::Daemon运行会显示相同的行为 源代码 我用反勾号执行命令 print `$cmd` 或者像这样: open FH, "$cmd |" or die "Couldn't execute $cmd: $!\n"; while(defined(my $line = <FH>)) { chomp($line); print "
print `$cmd`
或者像这样:
open FH, "$cmd |" or die "Couldn't execute $cmd: $!\n";
while(defined(my $line = <FH>)) {
chomp($line);
print "$line\n";
}
close FH;
$cmd = '"C:\path\to\sscep.exe" getca -f "C:\path\to\config\capi_sscep.cnf"'
即使创建一个只执行此命令的小测试脚本,也只有在从命令行运行时才起作用
系统
- Windows x64
- 活动Perl v5.16.0,MSWin32-x64-多线程
- 日食朱诺20120614-1722
$?
为0
什么不起作用
使用相同的perlscript.pl
调用启动Eclipse并运行调试会话。
添加服务和执行命令(使用Win32::Daemon创建)也不起作用。守护进程本身工作得非常好,并按预期启动了perl脚本。只有命令不会执行<如果使用$?>>8
,不打印任何输出。退出代码不属于该程序
进一步详情
我调用的工具称为sscep,由我扩展。它使用OpenSSL API并加载capi引擎(Windows CryptoAPI)。但命令本身至少会在任何严重操作开始之前打印输出。我很乐意提供这方面的源代码,但我怀疑它是否有帮助
我能够进一步缩小范围:问题只存在于Perl程序(CertNanny)和二进制程序(sscep)的组合中。在CertNanny内部调用dir
是可行的,在测试Perl脚本中调用sscep
也是可行的。那么,在Perl中可以做些什么来阻止单个二进制文件被调用
这个问题可能来自何处,或者我如何缩小它?我认为问题在于:当您在命令行上运行程序时,system()命令通过shell(cmd.exe);当您在其他地方运行程序时,它不会。不幸的是,这两种方法处理命令行参数的方式不同
根据我的经验,这种东西在窗户里是一团糟。我在Perl中也遇到过这个问题。我认为问题在于:当您在命令行上运行程序时,system()命令通过shell(cmd.exe);当您在其他地方运行程序时,它不会。不幸的是,这两种方法处理命令行参数的方式不同
根据我的经验,这种东西在窗户里是一团糟。我在Perl中也遇到了这个问题。尝试通过
printf“%d”,$?>>8
。然后检查是否为您的程序记录了此代码,以及它的实际含义。确保您的程序位于PATH
如果您不在命令行print“$ENV{PATH}\n”
我检查了它,返回代码不属于该程序。我的程序不需要位于路径
,因为我显式地调用了它(请参阅上面的绝对路径调用)。我现在还检查了$?
中的任何其他数据,即信号($?&127
)和转储($?&128
),但两者都报告了0
。此外,我尝试在没有任何参数的情况下调用该程序,因此我确切地知道它将在哪里退出,但它没有。另外,我检查了,没有返回53
的退出函数,也没有返回源代码中任何地方的编号53
。因此,当组合导致错误时,程序无法正确执行…请尝试通过printf“%d”,$?>>8
。然后检查是否为您的程序记录了此代码,以及它的实际含义。确保您的程序位于PATH
如果您不在命令行print“$ENV{PATH}\n”
我检查了它,返回代码不属于该程序。我的程序不需要位于路径
,因为我显式地调用了它(请参阅上面的绝对路径调用)。我现在还检查了$?
中的任何其他数据,即信号($?&127
)和转储($?&128
),但两者都报告了0
。此外,我尝试在没有任何参数的情况下调用该程序,因此我确切地知道它将在哪里退出,但它没有。另外,我检查了,没有返回53
的退出函数,也没有返回源代码中任何地方的编号53
。因此,虽然这种组合会导致错误,但程序无法正确执行……问题是:这在其他非常类似的系统上也能工作,只是在我的系统上不行。此外,这不是引用问题,因为所有路径都被正确引用,不需要转义任何内容,所以您的链接没有帮助。对不起,问题是:这在其他非常相似的系统上也能工作,只是在我的系统上不行。此外,这不是引用问题,因为所有路径都被正确引用,不需要转义任何内容,所以您的链接没有帮助。很抱歉
perl script.pl