Выполнить команды последовательно в Python?

20
задан martineau 25 June 2019 в 17:30
поделиться

4 ответа

Существует простой способ выполнить последовательность команд.

Используйте следующее в 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()

Это позволит Вам создавать последовательность из команд.

20
ответ дан 29 November 2019 в 23:17
поделиться

Чтобы сделать это, Вы имели бы к:

  • предоставляют shell=True аргумент в эти subprocess.Popen, вызов, и
  • разделяет команды с:
    • ; при выполнении под *отклоняют оболочку (удар, пепел, sh, ksh, csh, tcsh, zsh и т.д.)
    • & при выполнении под cmd.exe из Windows
26
ответ дан 29 November 2019 в 23:17
поделиться

Нахождение 'запрещает' в каждом файле, имя которого содержит 'нечто':

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()

и 'допускают ошибку', строковые объекты, содержащие стандартный вывод и, в конечном счете, вывод ошибок.

3
ответ дан 29 November 2019 в 23:17
поделиться

Да, subprocess.Popen() функция поддерживает cwd аргумент ключевого слова, с которым Вы можете установить справочник, в котором это управляет процессом.

я предполагаю, что первый шаг, раковина, не нужен, если все, что Вы хотите, должно бежать ls, нет никакой потребности управлять им через раковину.

, Конечно, Вы могли также просто передать желаемый справочник как аргумент ls.

Обновление: могло бы стоить отметить, что для типичных раковин, cd реализован в самой раковине, это не внешняя команда на диске. Это вызвано тем, что это должно изменить текущий каталог процесса, который должен быть сделан из процесса. Начиная с команд, которыми управляют, поскольку, ребенок обработал, порожденный раковиной, они не могут сделать этого.

2
ответ дан 29 November 2019 в 23:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: