我使用一个名为 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文件时也会出现问题。)
答案 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
用):
PATH
/ {{1}时Perl的环境中 system
可能不存在(或不再存在) }调用,或者 `STRING`
格式不正确,或 PATH
中的所有目录实际上都不包含PATH
在cmd.exe
/ system
调用`STRING`
可能存在且其中一个目录可能包含PATH
(或某些 cmd.exe
),但可能存在是特定cmd.exe
的其他问题(例如权限问题, DLL问题等)cmd.exe
的调用实际上已成功,但命令行中的其他可执行文件已传递给cmd.exe
/ system
(并由`STRING`
生成为子项,例如cmd.exe
)异常死亡(不调用DrWatson)和returned an exit code(例如导致进程终止的未处理异常的异常值)Perl然后被误解为失败hunalign.exe
本身您可以使用Process Monitor轻松查明上述哪种情况。
首先在Process Monitor中将过滤器设置为包含在cmd.exe
包含 Path
和cmd.exe
的事件是 Event Class
以及File System
是 Event Class
。
Process
中通常出现的所有目录中查找cmd.exe
(例如IRP_MJ_CREATE
),包括例如PATH
C:\windows\system32
(或C:\windows\SysWOW64
视情况而定)?C:\windows\system32\cmd.exe
(或C:\windows\SysWOW64\cmd.exe
视情况而定),结果列中是否还有SUCCESS
以外的内容? (例如,权限问题的指示?)Create Process
成功的cmd.exe
事件是否成功?成功的Load Image
事件?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名成员的解决方案如下:
在文本编辑器中,打开位于Greenstone安装的“gli”文件夹中的文件gli.bat
在顶部附近,在设置GLILANG = en之后添加以下行:set PATH = c:\ windows \ systems32;%PATH%上面的手动前缀为c:\ windows \ systems32;在GLI执行期间到PATH。
现在尝试运行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中找不到...... 我认为未扩展的变量可能是一个普遍的问题。