Я использую Python3 и хочу получить < или > через argv. вот мой код:
str_args = [ str(x) for x in argv[1:] ] #create sequence
cmd = ''
for i in argv[1:]: #create str
cmd += i + ' '
path = 'cmd.txt'
file=open(path, "a")
file.write(cmd + '\n')
file.close()
здесь, в цикле for, я объединяю аргументы, чтобы создать команду терминала linux и записать в файл .txt. Я выполняю эту команду в другом месте. когда я набираю <или> (больше или меньше), он проходит только до <или>. пример:
echo 12 > test.txt
и это просто получить
echo 12
и не проходит> test.txt Что мне делать ? Он отлично работает для примеров, отличных от <или>. например, он хорошо передает такую команду:
ping 8.8.8.8 -c 2 -s 60
Спасибо






> и < обрабатываются оболочкой специально, это не имеет ничего общего с python, потому что оболочка удаляет их перед вызовом вашего кода. Без кавычек > означает отправку вывода команды в файл, указанный в качестве следующего аргумента. В вашем случае стандартный вывод скрипта будет перенаправлен в файл test.txt.
Чтобы передать их как символьные строки, вы должны использовать кавычки или escape-символ:
# using quotes
python the_script.py echo 12 '>' test.txt
# using the escape character
python the_script.py echo 12 \> test.txt
Примечание: вам нужно беспокоиться не только о > и <. Такие персонажи, как * и некоторые другие, тоже нуждаются в защите. Все они упоминаются на странице руководства bash (или странице руководства любой оболочки, которую вы используете).
@OmidEstaji: мне недостаточно информации, чтобы понять, что означает «не выполняется». Если у вас есть другой вопрос, я рекомендую вам нажать кнопку «задать вопрос». Комментарии предназначены для пояснения, а вы задаете другой вопрос.
Некоторые символы, такие как > или <, имеют особое значение для оболочки POSIX, интерпретируются самой оболочкой и не передаются в качестве аргументов. Чтобы исправить это, выйдите из них, написав перед ними обратную косую черту (\), например: python test.py a b c \> foo. Другой вариант - заключить их в кавычки (что рекомендуется делать в любом случае). Кроме того, ваш фрагмент кода содержит ошибку - в нем отсутствует import sys, и под argv вы, вероятно, имеете в виду sys.argv.
спасибо, это всего лишь небольшая часть моего кода, которая содержит весь импорт.
работает спасибо! но я использую этот argv как для запуска как команды, так и для записи в файл. теперь он правильно записывает в файл, но не выполняется! но я могу справиться с этим где-нибудь, вы подходите для обеих целей?