Поведение du -sh в терминале и из скрипта python?
Что касается моего вопроса в SuperUser, я сталкиваюсь с удивительной ситуацией, когда использование du -sh /media/ExternalHd/myfolder/*
работает как ожидалось от терминала, но используя p=subprocess.Popen(['du', '-sh', '/media/ExternalHd/myfolder/*'], stdout=subprocess.PIPE)
в скрипте Python показывает error du: cannot access /media/ExternalHd/myfolder/*: No such file or directory
2 ответа
Терминал расширяет * для вас. Чтобы подпроцесс сказал это сделать:
p=subprocess.Popen('du -sh /tmp/*', shell=True)
Или вы можете использовать модуль glob для расширения *, если вам нужен больший контроль
Вы должны добавить параметр shell=True
в ваш подпроцесс. Откройте функцию. Так что вы можете вызывать оболочку и использовать переменные окружения, файловые глобусы и т. Д.
p = subprocess.Popen(['du', '-sh', '/media/ExternalHd/myfolder/*'], stdout=subprocess.PIPE, shell=True)
Тем не менее, вы должны избегать использования shell=True
Из-за угроз безопасности см. предупреждение в документации по модулю подпроцесса Python. Для такого маленького сценария, возможно, это не создает проблем, но имейте в виду;)
Для получения дополнительной информации см. Этот ответ на другой вопрос stackru.