История изменений
Исправление pawnhearts, (текущая версия) :
Т.е. никто извне не сможет иметь доступ.
Причем тут это? Дело в том, что всякие эти «|» разбирает интерпретатор шелл и создает конвеер. Если ты просто запускаешь программу через spawn* или там exec* ты можешь только передать путь к программе и аргументы, всякие «|» работать не будут.
а Popen(.., shell=True) это, в общем, аналог subprocess.Popen(['/bin/sh', '-c', 'ps aux|grep python'])
И sh уже разбирает эту строку.
P.S. во многих книжках по программированию под unix/linux в качестве примера разбирается написание примитивного шелла который будет в т.ч. разбирать конвееры и строить их перенаправляя вывод из одной программы в другую.
P.P.S. второй вариант может порождать зомби процессы при определенных условиях. У варианта с запуском через шелл свои недостатки - например тебе надо будет думать об экранировании параметров т.е. Popen(['cat','file with space.txt']) будет работать, а при shell=True надо будет имя файла брать в кавычки или экранировать пробелы. Потом ты получишь pid шелла, а не команд, которых в нем выполняешь.
Исправление pawnhearts, :
Т.е. никто извне не сможет иметь доступ.
Причем тут это? Дело в том, что всякие эти «|» разбирает интерпретатор шелл и создает конвеер. Если ты просто запускаешь программу через spawn* или там exec* ты можешь только передать путь к программе и аргументы, всякие «|» работать не будут.
а Popen(.., shell=True) это, в общем, аналог subprocess.Popen(['/bin/sh', '-c', 'ps aux|grep python'])
И sh уже разбирает эту строку.
P.S. во многих книжках по программированию под unix/linux в качестве примера разбирается написание примитивного шелла который будет в т.ч. разбирать конвееры и строить их перенаправляя вывод из одной программы в другую.
Исходная версия pawnhearts, :
Т.е. никто извне не сможет иметь доступ.
Причем тут это? Дело в том, что всякие эти «|» разбирает интерпретатор шелл и создает конвеер. Если ты просто запускаешь программу через spawn* или там exec* ты можешь только передать путь к программе и аргументы, всякие «|» работать не будут.
а Popen(.., shell=True) это, в общем, аналог subprocess.Popen(['/bin/sh', '-c', 'ps aux|grep python'])
И sh уже разбирает эту строку.