Не могу создать "cmd.exe" - PullRequest
       3

Не могу создать "cmd.exe"

1 голос
/ 27 сентября 2011

Я использую программу под названием 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 ]

3 голосов
/ 27 сентября 2011

Я скачал приложение , о котором идет речь .Это Perl-приложение, упакованное с использованием pp.

Чтобы увидеть рассматриваемый код, 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 голос
/ 27 сентября 2011

Я автор LF Aligner.Честно говоря, я немного сбит с толку ошибкой «not spawn cmd.exe».Если это не неправильное сообщение об ошибке, то проблема, похоже, не в самой LF Aligner.Вы можете попробовать проверить, действительно ли ошибка вызвана тем, что один файл намного короче другого.Это приведет к прерыванию работы Hunalign, так как невозможно выполнить разумную работу по объединению предложений, и тогда LF Aligner останавливается с сообщением об ошибке, которое вы опубликовали.Кроме этого, это может быть какая-то ошибка в Hunalign (вряд ли) или LF Aligner (немного менее вероятно, но я все равно буду удивлен).В качестве теста попробуйте выровнять два файла одинакового размера, например один и тот же файл под двумя разными именами.

Я мог бы попытаться устранить неполадки, сообщить мне, какой сценарий вы используете (и какойверсия).Размещение файла журнала также не повредит.

Re: комментарии по качеству кода;Я не профессиональный программист, и это хобби-проект.Я знаю, что это грязно и не элегантно, но это работает.

1 голос
/ 27 сентября 2011

Запускаете ли вы его из папки% WINDIR% \ system32? Вы проверили, изменилась ли переменная среды PATH при установке?

0 голосов
/ 21 апреля 2016

Я столкнулся с этой проблемой, когда в моей папке было "-" или дефис в названии, вероятно, perl интерпретировал это как команду вместо имени папки, заменил дефис подчеркиванием, и он начал работать нормально.

0 голосов
/ 12 ноября 2015

Нашел этот ответ на другом сайте, кажется, что переменная% SystemRoot% не всегда расширяется в perl, поэтому вам нужно установить точный путь. Приведенное ниже объяснение взято из этой вики-программы «greenstone», но может быть обобщено для проблемы, с которой вы здесь сталкиваетесь.

Ошибка сборки Windows: не удается запустить cmd.exe При сборке коллекции в GLI в Windows, если вы видите сообщение об ошибке, подобное следующему в выводе журнала сборки: «Не удается создать« cmd.exe »: такого файла или каталога нет…», попробуйте выполнить следующие действия. Об этой ошибке сообщили некоторые пользователи. Похоже, это происходит из-за того, что% SystemRoot%, переменная среды, используемая в% PATH%, которая оценивается как C: \ windows, не передается в код perl из GLI. В результате, PATH не содержит c: \ windows \ system32, который содержит cmd.exe, используемый perl для выполнения команд. Однако эта проблема, по-видимому, проявляется не для всех пользователей Windows в Greenstone.

Решение, которое сработало для двух участников списка рассылки, сообщивших об этой проблеме, выглядит следующим образом.

  1. В текстовом редакторе откройте файл gli.bat, который находится в папке "gli" вашей установки Greenstone

  2. В верхней части, сразу после set GLILANG = en, добавьте следующую строку: set PATH = c: \ windows \ systems32;% PATH% Вышеуказанные префиксы c: \ windows \ systems32; в PATH во время исполнения GLI.

  3. Теперь попробуйте запустить GLI и снова собрать коллекцию.

0 голосов
/ 17 августа 2015

Извините, я знаю, что это очень старая версия, и, возможно, на нее уже дан ответ, но я только что узнал в Windows, если вы используете встроенную функцию Perl system () для порождениявыполнимый, и этот исполняемый файл затем возвращает отрицательное значение выхода, Perl выдает это ошибочное сообщение Can't spawn ... .

Я использую Perl v5.14.2, так что это можетили, возможно, не были исправлены в более поздней версии Perl.

0 голосов
/ 10 января 2015

Существует несколько причин, по которым вы можете получить Can't spawn "cmd.exe": ... с Perl в Windows (т. Е. При условии, что вы можете успешно вызывать cmd.exe из командной строки или из http://res1.windows.microsoft.com/resbox/en/6.3/main/aa922834-ed43-40f1-8830-d5507badb56c_39.jpg+R для начала):

  1. Как указывалось ранее, PATH может не существовать (или больше не существовать) в среде Perl во время вызова system / `STRING`, или это может бытьчто PATH искажен или ни один из каталогов в PATH на самом деле не содержит cmd.exe во время system / `STRING` вызова
  2. PATH может существовать, и один из каталогов в нем может содержать cmd.exe (или некоторые cmd.exe), но могут быть другие проблемы с этим конкретным cmd.exe (например, проблемы с правами доступа , проблемы с DLL и т. д.)
  3. Вызов cmd.exe действительно выполнен успешно, но некоторые другие исполняемые файлы в командной строке, которые вы передалиsystem / `STRING` (и порожденный в детстве cmd.exe, например, hunalign.exe) умер ненормально (без вызоваDrWatson) и возвратили код выхода (например, значение исключения для необработанного исключения, вызвавшего завершение процесса), который затем Perl неверно истолковал как пропускающий сам себя cmd.exe

Вы можете легко определить, какой из приведенных выше сценариев, используя Process Monitor .

Начните с установки фильтра в Process Monitor на , включая события, где Path содержит cmd.exe и Event Class - File System, а также Event Class - Process.

  1. Имеет Windowsискал 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 в столбце Result ?(например, указание проблем с разрешениями?) Есть ли событие Create Process для cmd.exe, которое прошло успешно?Событие Load Image, которое прошло успешно?
  3. Запись номера PID из столбца Detail , соответствующего успешному событию Create Process, и отключение фильтров, о которых я упоминал выше, заменяя их на одинPID - это фильтр , каково значение для состояния выхода в столбце Detail , соответствующее Process Exit для записанного PID;Например, отрицательное значение, например -1073741819 (0xc0000005)?
0 голосов
/ 14 мая 2014

ПУТЬ уже проверена, но я получил ту же ошибку с нашим программным обеспечением, и вы можете воспроизвести ее с помощью следующего:

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" не может быть найден в ПУТИ ... Я думаю, что нерасширенные переменные могут быть общей проблемой.

0 голосов
/ 01 января 2014

это означает, что в вашей системной переменной среды отсутствует Путь c:\windows\system32, чтобы решить эту проблему, перейдите к my computer\properity\advance\environment variable, перейдите к таблице system variable, отредактируйте путь, добавьте путь c:\windows\system32

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...