2010-04-03 2 views
1

У меня есть быстрый вопрос о создании файлов с perl и их выполнении. Я хотел знать, можно ли создать файл с использованием perl (мне действительно нужен сценарий .bat), а затем выполнить этот файл внутри программы. Я знаю, что могу создавать файлы, а у меня с perl, но я хочу сделать это внутри программы. Итак, что я хочу сделать, это на самом деле создать пакетный скрипт внутри программы (на диске не записывается файл, все остается в памяти или программа perl), а затем, когда он завершает запись файла, Я хотел бы иметь возможность фактически выполнить этот файл, а затем отказаться от файла, который он только что написал. Я в основном пытаюсь создать пакетный скрипт «на лету», чтобы я мог просто выводить текстовые файлы из вывода скрипта, а не создавать пакетный скрипт на диске, а затем выполнять его, а затем удалять пакет файл с диска после его завершения.Perl - Внутренний файл (создание и выполнение)

Можно ли это сделать и как я могу это сделать?

С уважением, Дрю

+3

Почему вы хотите написать программу Perl, которая записывает пакетную программу для выполнения некоторой обработки вместо того, чтобы выполнять любую обработку из вашей программы Perl? –

+0

Также см. Http://stackoverflow.com/questions/2569833/what-are-the-reasons-to-use-dos-batch-programs-in-windows – FMc

ответ

1

открыть файл; создать содержимое; закройте файл; выполнить файл (например, с помощью системы()); удалите файл.

2

Вам действительно нужен пакетный скрипт? Возможно, все, что вы хотите сделать, может быть выполнено непосредственно с Perl или вызывается непосредственно Perl через команду system.

Если необходим пакетный скрипт, что не так с созданием временного файла для скрипта, а затем его выполнение с помощью system? См. File::Temp, который автоматически удалит временный файл после завершения.

Если стратегия виртуального пакета неизбежна, возможно, вы сможете использовать /C и, возможно, /S опции cmd. Что-то вроде этого:

use strict; 
use warnings; 

my @batch_commands = (
    'dir', 
    q{echo "Make sure quoting isn't busted"}, 
    'ipconfig', 
); 

# Use & or &&, depending on your needs. Run `cmd /?` for details. 
my $virtual_bat_file = join " &\n", @batch_commands; 

system "cmd /C $virtual_bat_file"; 

Но это очень нехорошо. Должен быть лучший способ выполнить любую задачу, большую цель вашего приложения. Кстати, когда вы запустите cmd /?, чтобы узнать о /C, /S и & против &&, вы быстро оцените, насколько это ужасно в Земля с партиями. Держитесь подальше, если это вообще возможно.

+0

FM благодарит за ваши усилия. Позвольте мне продолжить объяснять. Причина, по которой я хочу это сделать, заключается в том, что пакетный скрипт, который необходимо создать, динамически построен. Таким образом, в основном, на основе каталога, полного файлов, в моем случае, файлов TIF, который строит набор команд, которые получают информацию из этих файлов tif, а затем экспортирует текстовый файл с этими необработанными данными. Прямо сейчас, скрипт .batch создается, выводится в файл, а затем остается на диске. – drewrockshard

+0

... Продолжение ... Я знаю, что я могу легко удалить файл в конце выполнения, однако я этого не хочу. Я действительно хочу, чтобы он создал набор команд и выполнил сценарий, и никогда не создавал пакетный файл на диск. Пакетный сценарий все динамические данные, и в формате: tiffcommand tifffile.tif tiffcommand tifffile2.tif и т.д. и т.п. ... Данные всегда будут меняться, поэтому я хочу, чтобы он динамически создавался и выполнялся «на лету». – drewrockshard

+0

В большинстве файловых модулей temp (IIRC, включая File :: Temp) есть возможность автоматически удалять созданный файл temp после того, как программа существует, или временный файл-объект выходит за рамки. – DVK

Смежные вопросы