#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