#python #subprocess #alias #ls
Вопрос:
Я работаю над индивидуальной версией ls
. В этой настроенной версии, называемой lf
(list fancy), я просто создал псевдоним ls
с флагами -AbcFghkLst
. Тем не менее, я хочу получить от этого больше функциональности, не запоминая, что делает каждый флаг. Например, lf -n
будет сортироваться по имени или lf -c
по времени создания. Чтобы решить эту задачу, я использую argparse
для флагов.
В этом и заключается проблема. Псевдоним lf
вызывает ls
и выводит раскрашенные выходные данные на консоль. subprocess.run()
выводит мягкий вывод на консоль. Есть ли способ передать раскрашенный вывод через subprocess.run()
? Если нет, то есть ли способ добавить поведение флага lf
?
Вот пример текущего кода.
import argparse
import subprocess
parser = argparse.ArgumentParser(description='A fancy version of ls')
group = parser.add_mutually_exclusive_group(required=False)
group.add_argument('-n', '--name', action='store_true', help='Sort entries by name')
group.add_argument('-c', '--created', action='store_true', help='Sort entries by creation date')
args = parser.parse_args()
ls = ['ls']
flags = '-AbcFghkLs' # Desired output before sorting flag.
if args.name:
flags = 'l'
ls.extend([flags])
elif args.created:
ls.extend([flags])
else:
ls.extend(['-AbcFghkLst'])
subprocess.run(ls)
Комментарии:
1. Без
--color
аргумента ls не окрашивает вывод. (Я подозреваю, что вашlf
псевдоним соединяется с другим псевдонимом, который использует--color
аргумент.)2. Я удивлен, что пропустил это, просматривая документацию. Однако после тестирования я не могу передать
--
аргументыls
. Я понял ошибкуls: illegal option -- -
. Я также понял, чтоls
это псевдоним, кls -G
которому добавляется цвет, но я не понимаю, почему.3. Какова полная команда, которая генерирует эту ошибку?
4.
ls --color=always
генерирует эту ошибку. Я также подумал--group-directories-first
, что было бы неплохо, но этот флаг вызывает ту же ошибку.5. На macOS Catalina действительно нет опций с двойным тире.
-G
это вариант цвета. Я предполагаю, что Биг Сур-то же самое.