Я имею следующую команду, которую я хочу выполнить в Python и хранить в переменной:Лучший способ выполнить команду 'ls' shell с несколькими аргументами?
ls -1 var1 2>/dev/null | grep var2 | grep var3 | head -n 1
Но я не могу заставить его работать. Я попытался использовать подпроцесс (как «вызов», так и «check_output», а также «os.system», и ничего не работало. Оно всегда давало мне ошибку или неправильный ввод, а когда я выполняю эту команду в оболочке, она работает правильно.
BTW, это вообще очень плохой форме, даже в родной оболочке - как описано в http://mywiki.wooledge.org/ParsingLs - и вдвойне в Python, где есть собственные инструменты для итерации по дереву каталогов. Не все возможные имена файлов * могут быть представлены в потоке с разделителями новой строки, поэтому обязательно должны быть имена, которые 'ls' будут искажать. –
Если вы хотите вызвать группу команд оболочки, скрипт оболочки будет более подходящим инструментом, чем программа Python. Если вы хотите написать Python, вы должны использовать такие инструменты, как 'os.listdir' и собственные утилиты, соответствующие строкам Python. – user2357112
Что сказал Чарльз Даффи. Также см. Ответы на [Why * not * parse 'ls'?] (Http://unix.stackexchange.com/q/128985/88378) в Unix & Linux. –