выполнение Perl-скрипта из Python

2

Я пытаюсь выполнить скрипт Perl из скрипта python, но похоже, что он не был выполнен! используя эту команду в python:

os.popen('dump_hash.pl {}'.format(scn_filepath))

это сценарий dump_hash.pl:

$path = <STDIN>;
require "$path";
open (OUTFILE, "+>dumpered_hash");
print OUTFILE Dumper("\%...");
close (OUTFILE);

и скрипт запускается при попытке открыть 'dumpered_hash' в качестве читаемого файла. и когда я запускаю команду ls в оболочке, в каталоге нет файла dumpered_hash.

Спасибо вам.

  • 0
    Как может скрипт «не был выполнен» и все же «зависает при попытке открыть»? Если это проблема с открытием файла для вывода, возможно, вам помогут следующие ссылки: perldoc.perl.org/File/Path.html#ERROR-HANDLING stackoverflow.com/questions/3233327/… - в противном случае, вы можете предоставить больше Подробная информация? Что работает, что нет, как был назван сценарий и т. Д. Также вставляйте точные сообщения об ошибках.
  • 0
    моя ошибка, он застрял в команде os.popen (..).
Показать ещё 4 комментария
Теги:

1 ответ

3
Лучший ответ

Ваш скрипт Perl неверен:

  • Вы читаете путь из STDIN, а не из аргументов командной строки.
  • Вы не удаляете новую строку после прочтения строки. Вы будете искать "foo\n" вместо "foo".
  • У вас нет никакой проверки ошибок.
  • Вы не загружаете модуль Data::Dumper.

И вы уверены, что действительно хотите выполнить файл в $path как Perl-код?

Убрал, я бы написал Perl-скрипт как

perl -MData::Dumper \
  -do $ARGV[0];' \
  -e'print Dumper \%some_global' \
  input-file.pl >output

Или как

use strict; use warnings;
use Data::Dumper
do $ARGV[0];
open my $fh, ">", "output" or die "Can't open output: $!";
print { $fh } Dumper \%some_global;

Если вы действительно хотите имя файла из STDIN:

 use strict; use warnings;
 use Data::Dumper;
 chomp(my $path = <STDIN>);
 do $path;
 ...
  • 0
    путь к файлу, который содержит сложное имя хеш-таблицы /../hash.pl. Я загрузил самосвал, и у меня есть предупреждения. мне нужно, чтобы файл в пути.
  • 1
    require и do эквивалентны для этой цели.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню