2012-11-28 2 views
0

Со ссылкой на 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?

ответ

2

терминал расширяет * для вас. Сказать подпроцесс, чтобы сделать это:

p=subprocess.Popen('du -sh /tmp/*', shell=True) 

Или вы могли бы использовать модуль Глоб, чтобы расширить * себя, , если вам нужно больше контроля

+0

Спасибо, что решил мою проблему :) – Stacked

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 в другой вопрос о стеке.