2010-01-04 1 views
1

У меня есть .exe-файл. Когда я запускаю его, он запрашивает путь к CSV и .C-файлу. Моя проблема в том, что мне нужно выполнить этот .exe через Perl и автоматически указать путь файла .C, а также путь к файлу CSV. Как я могу это сделать? это графический интерфейс .exe через открытые команды я могу просмотреть и дать путь к файлу и гр CSV.I надеюсь, что это ясно, что я пытаюсь сказать ...Как я могу ответить на приглашения от внешней программы с помощью Perl?

link to snapshot

если и идти благодаря этому снимку вы можете понять мой формат .exe. У меня есть 2 переключателя в этом, и мне нужно выбрать радиокнопку B и нажать кнопку «Выполнить». если кто-то дает мне представление о том, как автоматически перейти через perl, hatsoff к ним, большое спасибо. "IAM ИСПОЛЬЗОВАНИЕ WINDOWS XP"

+0

Как просить пути? Вы имеете в виду, что вам предлагается ввести их? Покажите пример запуска .exe и ответа на вопросы. – ysth

+0

Снимок экрана может быть лучше. Я не уверен, что означают эти строки. –

ответ

2

Если вы просто хотите выполнить приложение с помощью system function. Как вы говорите, у вас есть .exe Я предполагаю, что Windows, так что Perl будет выглядеть примерно так:

$exitcode = system("c:\\Path\\App\\bin\\application.exe","C:\\dir\\file.csv"); 

Это использует рекомендуемый способ вызова system, передавая ей массив с первым элементом является командой run, а остальные записи - каждый аргумент командной строки. Вы можете передать ему отдельную строку, разделенную пробелами, но метод массива более безопасен.

Если вы хотите захватить вывод команды use backticks. Если вы, это безопаснее поставить пути к файлу в кавычках:

$output = `"c:\\Path\\App\\bin\\application.exe" "C:\\dir\\file.csv"`; 
print $output; 
1

Я предполагаю, что вы используете Windows. используйте команду System() для запуска вашего кода. Вот пример:

system($command, @arguments); 

# For example: 
system("sh", "script.sh", "--help"); 
system("sh script.sh --help"); 
1

подходов, предложенных выше, работает хорошо, если исполняемый файл ожидают аргументы (входы) в качестве аргумента командной строки. Но если ваша программа запрашивает ваш вход во время его запуска и ожидает ввода ввода через стандартный ввод, вы можете попробовать что-то вроде этого:

Скажите, что у меня есть программа с именем sum.exe, которая при запуске подскажет мне за два числа и печатает их сумму.

 
C:\Documents and Settings> sum.exe 
Enter A 
1 
Enter B 
2 
1 + 2 = 3 

Теперь, чтобы запустить этот sum.exe через Perl'е вы можете сделать что-то вроде:

system("sum.exe < input"); 

, где входной файл имеет все входы, которые ожидает ваша программа/подсказок во время его запуска. В моем случае:

 
C:\Documents and Settings> type input 
1 
2 

Так что в вашем случае вы можете сделать вход файл содержит путь CSV-файла и путь к файлу .C.

4

С предоставленной информацией, я думаю, вы можете попробовать IPC-Run или, может быть, the Expect CPAN module. Это позволяет вам управлять внешней консольной программой из Perl и передавать и считывать с нее информацию STDOUT/STDERR/STDIN.

+0

Ожидание не работает в Windows. –