Argv не читает <или> python

Я использую 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 есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
65
2

Ответы 2

> и < обрабатываются оболочкой специально, это не имеет ничего общего с 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 (или странице руководства любой оболочки, которую вы используете).

работает спасибо! но я использую этот argv как для запуска как команды, так и для записи в файл. теперь он правильно записывает в файл, но не выполняется! но я могу справиться с этим где-нибудь, вы подходите для обеих целей?

Omid Estaji 13.08.2018 19:08

@OmidEstaji: мне недостаточно информации, чтобы понять, что означает «не выполняется». Если у вас есть другой вопрос, я рекомендую вам нажать кнопку «задать вопрос». Комментарии предназначены для пояснения, а вы задаете другой вопрос.

Bryan Oakley 13.08.2018 19:57

Некоторые символы, такие как > или <, имеют особое значение для оболочки POSIX, интерпретируются самой оболочкой и не передаются в качестве аргументов. Чтобы исправить это, выйдите из них, написав перед ними обратную косую черту (\), например: python test.py a b c \> foo. Другой вариант - заключить их в кавычки (что рекомендуется делать в любом случае). Кроме того, ваш фрагмент кода содержит ошибку - в нем отсутствует import sys, и под argv вы, вероятно, имеете в виду sys.argv.

спасибо, это всего лишь небольшая часть моего кода, которая содержит весь импорт.

Omid Estaji 13.08.2018 19:05

Другие вопросы по теме