Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Exec() и русские буквы/пробелы в пути


Автор: Suppir 9.6.2011, 16:50
пытаюсь с помощью exec() запустить файл, но этот файл запускается только в том случае, если путь в нему не содержит пробелов или русских букв. Как можно обойти? (под windows)

Добавлено через 1 минуту и 45 секунд
Как можно из нашего скрипта запустить другой perl-скрипт, если известен его адрес (содержащий пробелы) ?

Автор: arto 9.6.2011, 17:08
# cat > "aa bb pl"
#! /usr/bin/perl

print "DONE\n";
# chmod +x "aa bb pl"
# ./"aa bb pl"
DONE
# perl -le 'exec "./aa\\ bb\\ pl";'
DONE
#

Автор: Suppir 10.6.2011, 08:03
ничего не понял smile

Автор: alezzz 10.6.2011, 09:03
есть папка, которая называется "папка папка", в ней лежит test.pl:
Код

print "test\ntest\n";


есть run.pl:
Код

exec('perl "d:\\папка папка\\test.pl"');

в run.pl кирилица в кодировке cp-1251.

все работает.

Код

D:\>dir
 Том в устройстве D имеет метку Work
 Серийный номер тома: D854-34E8

 Содержимое папки D:\


<лишнее вырезал>

10.06.2011  08:53    <DIR>          папка папка
               1 файлов             40 байт
              11 папок     526 979 072 байт свободно

D:\>perl run.pl

D:\>test
test

D:\>

Автор: Сумасшедший 10.6.2011, 13:27
Т.е имя файла в кавычки возьмите и в 1251 пишите кириллицу к скриптах.

Автор: Suppir 10.6.2011, 14:52
alezzz, а если имя файла в переменной?

Автор: alezzz 10.6.2011, 18:06
Код

$a = 'd:\папка папка\test.pl';
system("perl \"$a\"");


Вот почему так делается:
Код

D:\>cd папка пака
Системе не удается найти указанный путь.

D:\>cd "папка папка"

D:\папка папка>


Это в ХР,  в семерке перешло в папку без кавычек, но перл с семеркой не согласен.

exec заменил на system, после выполнения exec ждал нажатия клавиши.

Автор: Suppir 13.6.2011, 13:14
Последний вариант Alezzz'a работает, т.е. скрипт запускается, но при этом не получается запустить его с параметрами.

Автор: alezzz 13.6.2011, 19:53
Точно также и с параметрами:
run.pl
Код

$a = 'd:\папка папка\test.pl';
system("perl \"$a\" \"1 2\" 3");

test.pl в "папка папка"
Код

print "$_\n" foreach(@ARGV);


Код

D:\>perl run.pl
1 2
3


Два параметра, "1 2" и "3", первый параметр с пробелом, поэтому его в кавычки, второй необязательно (в данном случае)


Автор: Suppir 14.6.2011, 11:28
alezzz, в Windows 7 дочерний скрипт запускается, но при этом интерпретатор ругается. 

Автор: alezzz 14.6.2011, 16:02
как именно ругается? я показал свой вывод, у меня все нормально.

Автор: Suppir 14.6.2011, 17:16
Из дома еще раз гляну, чуть позже отпишусь...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)