Со ссылкой на my question at SuperUser, я столкнулся с ситуацией, когда загадочное используя du -sh /media/ExternalHd/myfolder/*
работы, как и ожидалось от терминала, но с использованием p=subprocess.Popen(['du', '-sh', '/media/ExternalHd/myfolder/*'], stdout=subprocess.PIPE)
в питон скрипт показывает error du: cannot access /media/ExternalHd/myfolder/*: No such file or directory
поведение du -sh в терминале и сценарии python?
0
A
ответ
2
терминал расширяет * для вас. Сказать подпроцесс, чтобы сделать это:
p=subprocess.Popen('du -sh /tmp/*', shell=True)
Или вы могли бы использовать модуль Глоб, чтобы расширить * себя, , если вам нужно больше контроля
0
Вы должны добавить параметр shell=True
к вашему subprocess.Popen FUNC , Так что вы можете вызвать оболочку и использовать переменные среды, сокращение имена файлов и т.д.
p = subprocess.Popen(['du', '-sh', '/media/ExternalHd/myfolder/*'], stdout=subprocess.PIPE, shell=True)
Тем не менее, следует избегать использования shell=True
из-за угрозы безопасности, см предупреждения в python subprocess module docs. Для небольшого сценария, подобного этому, возможно, это не создает проблемы, но имейте в виду;)
Для получения дополнительной информации см. this answer в другой вопрос о стеке.
Спасибо, что решил мою проблему :) – Stacked