Существует простой способ выполнить последовательность команд.
Используйте следующее в subprocess.Popen
"command1; command2; command3"
Или, если Вы застреваете с окнами, у Вас есть несколько вариантов.
Создайте временный ".BAT" файл и предоставьте это subprocess.Popen
Создайте последовательность команд с "\n" разделителями в единственной длинной строке.
Используйте" ""s, как это.
"""
command1
command2
command3
"""
Или, если необходимо сделать вещи по частям, необходимо сделать что-то вроде этого.
class Command( object ):
def __init__( self, text ):
self.text = text
def execute( self ):
self.proc= subprocess.Popen( ... self.text ... )
self.proc.wait()
class CommandSequence( Command ):
def __init__( self, *steps ):
self.steps = steps
def execute( self ):
for s in self.steps:
s.execute()
Это позволит Вам создавать последовательность из команд.
Чтобы сделать это, Вы имели бы к:
shell=True
аргумент в эти subprocess.Popen
, вызов, и ;
при выполнении под *отклоняют оболочку (удар, пепел, sh, ksh, csh, tcsh, zsh и т.д.) &
при выполнении под cmd.exe
из Windows Нахождение 'запрещает' в каждом файле, имя которого содержит 'нечто':
from subprocess import Popen, PIPE
find_process = Popen(['find', '-iname', '*foo*'], stdout=PIPE)
grep_process = Popen(['xargs', 'grep', 'bar'], stdin=find_process.stdout, stdout=PIPE)
out, err = grep_process.communicate()
и 'допускают ошибку', строковые объекты, содержащие стандартный вывод и, в конечном счете, вывод ошибок.
Да, subprocess.Popen()
функция поддерживает cwd
аргумент ключевого слова, с которым Вы можете установить справочник, в котором это управляет процессом.
я предполагаю, что первый шаг, раковина, не нужен, если все, что Вы хотите, должно бежать ls
, нет никакой потребности управлять им через раковину.
, Конечно, Вы могли также просто передать желаемый справочник как аргумент ls
.
Обновление: могло бы стоить отметить, что для типичных раковин, cd
реализован в самой раковине, это не внешняя команда на диске. Это вызвано тем, что это должно изменить текущий каталог процесса, который должен быть сделан из процесса. Начиная с команд, которыми управляют, поскольку, ребенок обработал, порожденный раковиной, они не могут сделать этого.