Проблема
У меня возникают ошибки с модулем Python3 subprocess. Подпроцесс окружает некоторые важные позиционные аргументы, которые я даю ему с кавычками Unicode, что приводит к сбою команды linux find.
У кого еще возникла эта проблема? В основном я пытаюсь выяснить, является ли это неправильной конфигурацией с моей стороны или я должен опубликовать ее как проблему для команды подпроцесса. Я уверен, что мог бы обойти это в своем коде, но мне показалось, что это ошибка, которую нужно устранить.
test.pyimport subprocess
p = subprocess.run(['find', '/.snapshots/*/snapshot', '-maxdepth', '0', '-type', 'd' ], capture_output=True, encoding='utf-8')
print(p)
test.py result
CompletedProcess(
args=['find', '/.snapshots/*/snapshot', '-maxdepth', '0', '-type', 'd'],
returncode=1,
stdout='',
stderr='find: ‘/.snapshots/*/snapshot’: No such file or directory\n'
)
Мой взгляд
Мне кажется, что подпроцесс заставляет find заключать мою строку пути в кавычки Unicode, и что bash просто регистрирует эти кавычки как еще один символ, как всегда делает команда find.
Intended commanduser@mine:$ find /.snapshots/*/snapshot/ -maxdepth 0 -type d
/.snapshots/1/snapshot/
/.snapshots/2/snapshot/
/.snapshots/3/snapshot/
Command it seems to be running
user@mine:$ find ‘/.snapshots/*/snapshot’ -maxdepth 0 -type d
find: ‘‘/.snapshots/*/snapshot\’’: No such file or directory
Тот факт, что кавычки являются юникодными, не проблема. С командой find (по крайней мере, по моему опыту с версиями, которые я использовал) вы просто не хотите передавать путь, заключенный в кавычки любого рода. Даже если есть обходной путь, который заставляет это поведение работать для команды find, все равно кажется проблемой ожидание следующей программы bash, которая не ожидает кавычек.
Another failed find commanduser@mine:$ find '/.snapshots/*/snapshot' -maxdepth 0 -type d
find: '/.snapshots/*/snapshot': No such file or directory
Сведения о системе
Когда я впервые столкнулся с этой проблемой, я использовал Python 3.7.4. Я обновился, чтобы узнать, есть ли исправление, поэтому теперь я использую python 3.8.1. Я работаю на Arch Linux, поэтому я ожидаю, что это могут быть типичные проблемы с использованием программного обеспечения, которое все еще находится в стадии тестирования.
find
уже не удалось. Проблема в том, что глобус не расширяется, потому что вы не используете оболочку для запуска команды, а/.snapshots/*/snapshot
воспринимается буквально. - person chepner   schedule 03.01.2020