Как передать аргументы python скрипту perl?

#python

#python

Вопрос:

Я пишу скрипт на python, из которого пытаюсь вызвать perl-скрипт. Входными данными для скриптов perl являются аргументы python.

  row[i[k]]=re.sub(r"^_", "", row[i[k]])
 row[i[k]]=re.sub(r"{", "[", row[i[k]])
 row[i[k]]=re.sub(r"}", "]", row[i[k]])
 row[i[0]]=re.sub(r"^_", "", row[i[0]])
 row[i[0]]=re.sub(r"{", "[", row[i[0]])
 row[i[0]]=re.sub(r"}", "]", row[i[0]])
 cmd = "perl process_str.pl -str1 "row[i[0]]" -str2 "row[i[k]]""
 os.system(cmd)
  

Но я вижу следующую ошибку при запуске скрипта python:

 cmd = "perl process_str.pl -str1 "row[i[0]]" -str2 "row[i[k]]""
                                ^
SyntaxError: invalid syntax
  

Комментарии:

1. Поместите простую кавычку вместо double для внутренних кавычек cmd = "perl process_str.pl -str1 'row[i[0]]' -str2 'row[i[k]]'"

2. Удален тег Perl, поскольку ничего в этом вопросе не относится к Perl. Вы создаете команду оболочки

3. И не делайте того, что предлагает азро. 1) Это не будет интерполировать значения, а передавать выражения как есть, и 2) Если бы это было интерполировано, это пострадало бы от ошибки внедрения кода

Ответ №1:

Можно использовать следующее:

 subprocess.call([ "perl", "process_str.pl", "-str1", row[i[0]], "-str2", row[i[k]] ])
  

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

Комментарии:

1. Вывод? Вы имеете в виду, что программа печатает в стандартный вывод? Вы хотите напечатать в стандартный вывод то, что программа печатает в стандартный вывод? Ну, хм, это уже происходит.

2. вывод perl-скрипта — string, и когда я запускаю pythin, он не выдает никаких выходных данных

3. Нет. Если он ничего не выводит, он ничего не выводит.

4. Я независимо запустил perl-скрипт, и он работал правильно для меня. Затем, когда я включаю perl-скрипт в python, он не работает.

5. perl process_str.pl -str1 «iod.BP_0_D[104,44,32,20,8,105,45,33,21,9]» -str2 «MCA_DQS_H[9]_RSVD),(MCA_DQS_H[8:5]_MCA_DM[3:0]), MCA_DQS_H[4:0]» BP_0_D[104], MCA_DQS_H_9_RSVD_ BP_0_D[44], MCA_DQS_H_8_MCA_DM_3