Где делает стр (ПАРИТЕТ), распаковывают, добавляют (-a) файлы?

Стандарт SQL-92 позволяет, чтобы constaint был объявлен как ДОПУСКАЮЩИЙ ЗАДЕРЖКУ так, чтобы он мог быть задержан (неявно или явно) в рамках транзакции. К сожалению, SQL Server все еще пропускает эту функциональность SQL-92.

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

6
задан Community 23 May 2017 в 12:16
поделиться

3 ответа

Файлы упакованного исполняемого файла извлекаются во временный каталог (обычно / tmp / par-USERNAME / cache-XXXXXXX). Чтобы получить доступ к этим файлам, сделайте что-то вроде следующего:

#!/usr/bin/perl

# Reads a data file from the archive (added with -a)
print PAR::read_file("data");

# Will execute "script2" in the archive and exit. Will not return to this script.
require PAR;
PAR->import( { file => $0, run => 'script2' } );

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

Фактически, перечитывая свой вопрос, просто открывая переменная среды PAR_TEMP, вероятно, более полезна:

#!/usr/bin/perl
use File::Slurp qw(slurp);

$data_dir = "$ENV{PAR_TEMP}/inc";
$script_dir = "$data_dir/script";

print slurp("$data_dir/datafile");

# file access permissions are not preserved as far as I can tell,
# so you'll have to invoke the interpreter explicitly.
system 'perl', "$script_dir/script2", @args;
6
ответ дан 8 December 2019 в 18:40
поделиться

Вот кое-что, что сработало в моей системе:

C:\tmp> cat build.bat
@echo off
mkdir output
call pp -o runner.exe runner.pl -a sayhello.bat
move runner.exe output\runner.exe
C:\tmp> cat sayhello.bat
@echo I am saying hello ...

C:\tmp> cat runner.pl
#!/usr/bin/perl

use strict;
use warnings;

use File::Spec::Functions qw( catfile );

my $prog_path = catfile $ENV{PAR_TEMP}, inc => 'sayhello.bat';

my $output = `$prog_path`;

print "The output was: >>> $output <<< ";

__END__

Вывод:

C:\tmp\output> runner.exe
The output was: >>> I am saying hello ...
<<<

Это кажется немного грязным.

3
ответ дан 8 December 2019 в 18:40
поделиться

Спасибо всем за вклад в этот ответ. Я добавляю этот ответ, чтобы выделить части бесценного вклада каждого, который я использовал, чтобы придумать решение, которое сработало для меня в моем конкретном приложении.

Приложение написано на ActiveState Perl с использованием POE и Tk и упаковано для распространения с использованием стр. Используется несколько внешних файлов; некоторые для ввода в программу (измененные данные из DNS) и некоторые для действий, предпринятых пользователем (создание и удаление записей псевдонимов DNS).

Упаковщик PAR (pp) включает внешние файлы с использованием аргумента -a. Эти файлы распаковываются в каталог \ inc по «временному» пути, созданному пакетом и доступному сценарию через

$ENV{PAR_TEMP}

. Первым шагом в решении было добавление этой информации в POE «$ heap».

4
ответ дан 8 December 2019 в 18:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: