无法生成“cmd.exe”

时间:2011-09-27 02:36:34

标签: perl cmd

我使用一个名为 LF-Aligner 的程序,该程序使用字典从不同语言的文本中生成并行文本。我相信它是用Perl编写的。它基于另一个名为 Hunalign 的程序。

几个月前我使用它时效果很好。它被意外删除了,我最近重新安装了它,但现在我只是收到错误消息:

Aligning...

Dictionary used by Hunalign: es-en.dic

Can't spawn "cmd.exe": No such file or directory at script/LF_aligner_2011_06_29_multi.pl line 1856.
Use of uninitialized value $alignedfilesize in numeric eq (==) at script/LF_aligner_2011_06_29_multi.pl line 1864.

-------------------------------------------------

Align failed (probably due to one file being empty or very short). ABORTING...

我无法理解。这可能与我在此期间安装的东西发生冲突吗?或者我删除的东西,也许?

(问题不在于“一个文件为空或非常短”,正如程序所示。文件很好。)

编辑:这是日志文件:

Program: LF aligner, version: 2.56, OS: Windows, launched: 2011/09/28, 04:13:01

Setup: filetype_def: t; filetype_prompt: y; l1_def: en; l2_def: hu; l1_prompt: y; l2_prompt: y; segmenttext_def: y; segmenttext_prompt: y=; cleanup_def: y; cleanup_prompt: y; review_def: x; review_prompt: y; create_tmx_def: y; create_tmx_prompt: y; l1_code_def: EN-GB; l2_code_def: HU; l1_code_prompt: y; l2_code_prompt: y; creationdate_prompt: y; creationid_def: ; creationid_prompt: y; ask_master_TM: n; chopmode: 0; tmxnote_def: ; tmxnote_prompt: y; pdfmode: y

GUI on
filetype: t
Input file 1: kakeen.rtf (C:/Users/jippi/Desktop/qewr/kakeen.rtf)
Input file 2: kaketo.rtf (C:/Users/jippi/Desktop/qewr/kaketo.rtf)
Input file sizes: 1375014 bytes 1375014 bytes
Converting rtf files to txt; AbiWord binary: C:\Program Files (x86)\LF_aligner_2.56\aligner\scripts\abiword\bin\AbiWord.exe
Converting rtf files to txt; AbiWord binary: C:\Program Files (x86)\LF_aligner_2.56\aligner\scripts\abiword\bin\AbiWord.exe
File sizes after conversion to txt: 1074504 bytes 1074504 bytes
Initial stats: 
- en: 6091 segments,    196644 words,   1037434 chars
- en: 6091 segments,    196644 words,   1037434 chars
Segmentation: y

(当我使用txt文件时也会出现问题。)

9 个答案:

答案 0 :(得分:3)

我下载了application in question。它是使用pp打包的Perl应用程序。

要查看相关代码,unzip下载的文件,然后使用

提取可执行文件的内容

E:\Home\Downloads\LF_aligner_2.56_win\aligner> unzip LF_aligner_2.56.exe -d some-temp-dir

你会找到文件

some-temp-dir\script\LF_aligner_2011_06_29_multi.pl

第1856行是:

system ("\"$hunalign_bin\" -text \"$scriptpath/scripts/hunalign/data/$hunalign_dic\" \"$folder/$file1\" \"$folder/$file2\" > \"$folder/aligned_${alignfilename}.txt\"");

至少可以说是混乱的。该程序不会检查system是否成功。由于system失败,后续尝试读取输出文件的大小也会失败(请注意警告),然后程序意识到出错:

# SEE IF ALIGNED FILE IS OK, ABORT IF NOT

my $alignedfilesize = -s "$folder/aligned_${alignfilename}.txt";
if ($alignedfilesize == 0) {
    print "\n\n-------------------------------------------------";
    print "\n\nAlign failed (probably due to one file being empty or very short). ABORTING...\n\n";
    print LOG "\nAligned file empty, aborted.";

这些都不能解决您的问题,但如果您愿意,可以给您一些调查。至少,您可能想要通知该程序的作者。

作者处理路径的方式过于混乱,其他任何人都没有感到真正有动力去调查。

答案 1 :(得分:1)

您是从%WINDIR%\ system32文件夹启动的吗?您是否检查过安装是否修改了PATH环境变量?

答案 2 :(得分:1)

我是LF Aligner的作者。 坦率地说,我对“无法生成cmd.exe”错误感到困惑。除非那是一些不正确的错误消息,否则问题似乎在LF Aligner本身之外。 您可以尝试查看错误是否确实是由于一个文件比另一个文件短得多。这会导致Hunalign中止,因为无法合理地完成句子的配对,然后LF Aligner将停止并显示您发布的错误消息。除此之外,它可能是Hunalign(不太可能)或LF Aligner的一些错误(不太可能,但我仍然感到惊讶)。 作为测试,尝试对齐两个大小相同的文件,例如两个不同名称下的同一个文件。

我可以尝试进行一些故障排除,让我知道您正在使用哪个脚本(以及哪个版本)。发布日志文件也不会受到影响。

Re:关于代码质量的评论;我不是一个专业的程序员,这是一个爱好项目。我知道它凌乱而且不优雅,但它确实有效。

答案 3 :(得分:0)

这意味着系统环境变量中缺少路径c:\windows\system32, 要解决此问题,请转到my computer\properity\advance\environment variable,转到表格system variable,修改路径,添加路径c:\windows\system32

答案 4 :(得分:0)

在Windows上使用Perl获取Can't spawn "cmd.exe": ...有多种原因(也就是说,假设您可以从命令提示符或http://res1.windows.microsoft.com/resbox/en/6.3/main/aa922834-ed43-40f1-8830-d5507badb56c_39.jpg + R)成功调用cmd.exe用):

  1. 如前所述,在PATH / {{1}时Perl的环境中 system可能不存在(或不再存在) }调用,或者 `STRING`格式不正确,或 PATH中的所有目录实际上都不包含PATH cmd.exe / system调用
  2. `STRING`可能存在且其中一个目录可能包含PATH(或某些 cmd.exe),但可能存在是特定cmd.exe的其他问题(例如权限问题 DLL问题等)
  3. cmd.exe的调用实际上已成功,但命令行中的其他可执行文件已传递给cmd.exe / system(并由`STRING`生成为子项,例如cmd.exe异常死亡(不调用DrWatson)和returned an exit code(例如导致进程终止的未处理异常的异常值)Perl然后被误解为失败hunalign.exe本身
  4. 您可以使用Process Monitor轻松查明上述哪种情况。

    首先在Process Monitor中将过滤器设置为包含cmd.exe 包含 Pathcmd.exe 的事件是 Event Class以及File System Event Class

    1. Windows是否在Process中通常出现的所有目录中查找cmd.exe(例如IRP_MJ_CREATE),包括例如PATH C:\windows\system32(或C:\windows\SysWOW64视情况而定)?
    2. 如果Windows找到C:\windows\system32\cmd.exe(或C:\windows\SysWOW64\cmd.exe视情况而定),结果列中是否还有SUCCESS以外的内容? (例如,权限问题的指示?)Create Process成功的cmd.exe事件是否成功?成功的Load Image事件?
    3. 从与成功的Create Process事件对应的明细列中记下PID编号,并禁用上面提到的过滤器,将其替换为单个PID 过滤器, Detail 列中退出状态的值与写入的PID的Process Exit对应的值是什么;是它,例如e负值,如-1073741819(0xc0000005)?

答案 5 :(得分:0)

抱歉,我知道这已经超级老了,也许它已经得到了解答,但我刚刚在Windows上发现如果您使用内置的Perl函数 system()来生成一个可执行文件,然后该可执行文件返回一个负的退出值,Perl会发出错误的无法生成... 消息。

我正在使用Perl v5.14.2,因此可能会在以后的Perl版本中修复此问题。

答案 6 :(得分:0)

在另一个网站上找到这个答案,似乎%SystemRoot%变量并不总是在perl中显示,因此您需要设置确切的路径。以下解释来自这个'绿石'软件维基,但可以推广到你在这里遇到的问题。

Windows Building错误:无法生成cmd.exe 在Windows上的GLI中构建集合时,如果在构建日志输出中看到如下所示的错误消息:无法生成“cmd.exe”:没有此类文件或目录...请尝试以下步骤。某些用户已报告此错误。它似乎发生是因为%SystemRoot%(%PATH%中使用的环境变量,其计算结果为C:\ windows)未从GLI传递到perl代码。因此,PATH不包含c:\ windows \ system32,其中包含perl用于执行命令的cmd.exe。但是,此问题似乎并未显示给Greenstone的所有Windows用户。

报告此问题的邮件列表的2名成员的解决方案如下:

  1. 在文本编辑器中,打开位于Greenstone安装的“gli”文件夹中的文件gli.bat

  2. 在顶部附近,在设置GLILANG = en之后添加以下行:set PATH = c:\ windows \ systems32;%PATH%上面的手动前缀为c:\ windows \ systems32;在GLI执行期间到PATH。

  3. 现在尝试运行GLI并再次构建集合。

答案 7 :(得分:0)

当我的文件夹名称中带有“ - ”或连字符时,我遇到了这个问题,可能perl将其解释为命令而不是文件夹名称,用下划线替换了连字符,它开始正常工作。

答案 8 :(得分:-1)

PATH已经过检查,但我的软件出现了同样的错误,你可以用以下内容重现:

c:\temp>set path=C:\Windows;C:\%SystemRoot%\system32;C:\Windows\System32\Wbem
c:\temp>perl -w -e "system('dir', 'C:\\');"
Can't spawn "cmd.exe": No such file or directory at -e line 1.

问题是," cmd.exe"在PATH中找不到...... 我认为未扩展的变量可能是一个普遍的问题。