Не могу передать аргументы в Perl-скрипт, используя Python - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь сделать то, что должно быть простым действием - выполнить скрипт perl из скрипта python3, передав несколько аргументов скрипту perl.Вот что я пробовал, ничего не работает:

Подход 1 - скрипт perl запускается, но аргументы не передаются

addexec = "../perl/bin/engine.pl"
addvars = " --uid " + str(our_id) + " --url '" + source_url + "'"
addtodb = subprocess.Popen(["/usr/bin/perl", addexec, addvars])

Подход 2 - скрипт perl не 'не запускается, говорит, что файл не найден

addexec = "../perl/bin/engine.pl --uid " + str(our_id) + " --url '" + source_url
addtodb = subprocess.Popen(["/usr/bin/perl", addexec])

Подход 3 - скрипт perl не запускается, выдает ошибки

addcmd = ["/usr/bin/perl", "../perl/bin/engine.pl", " --uid ", str(our_id), " --url '", source_url, "'"]
addtodb = subprocess.Popen(addcmd)

У кого-нибудь есть предложения?Спасибо!

1 Ответ

0 голосов
/ 20 декабря 2018

Подход 3 выглядит в целом правильно, но вы почти наверняка не хотите «заключать в кавычки» URL, должны предоставить правильный путь к скрипту и хотите передать один список в Popen.Попробуйте:

addcmd = ["/usr/bin/perl", "../perl/bin/engine.pl", "--uid", str(our_id), "--url", source_url]
addtodb = subprocess.Popen(addcmd)

Обновление: встроенное исправление от @ AJefferiss

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

Командная оболочка определяет программуаргументы разбора пользовательского ввода - обычно разбиваются на пробелы (кроме случаев, когда заключены в кавычки).Напротив, базовые API, такие как Popen, принимают список аргументов напрямую.

В результате при использовании таких API 1) вам не нужны кавычки и 2) вам нужно удалить лишние пробелывокруг аргументов.Вот почему вы не можете (обычно) использовать синтаксис оболочки, такой как ~, расширение по шаблону или переменные окружения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...