Поведение 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.

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