Как я могу выполнить две команды в терминале, используя модуль подпроцесса Python? - PullRequest
0 голосов
/ 11 февраля 2019

Как я могу использовать модуль подпроцесса (то есть call, check_call и Popen) для запуска более одной команды?

Например, допустим, я хотел выполнить команду ls дважды в быстрой последовательности, следующий синтаксис не работает

import subprocess
subprocess.check_call(['ls', 'ls'])

возвращает:

CalledProcessError: Command '['ls', 'ls']' returned non-zero exit status 2.

Ответы [ 3 ]

0 голосов
/ 11 февраля 2019

Этот следующий код будет работать.Но не лучше ли выполнить команду ls дважды?

import subprocess
subprocess.Popen(["ls;ls"],shell=True)
0 голосов
/ 12 февраля 2019

Вы можете использовать && или ;:

$ ls && ls
file.txt file2.txt
file.txt file2.txt

$ ls; ls
file.txt file2.txt
file.txt file2.txt

Разница в том, что в случае && вторая команда будет выполнена, только если первая была успешной (попробуйте false && ls) в отличие от ;, в этом случае команда будет выполняться независимо от первого выполнения.

Итак, код Python будет:

import subprocess
subprocess.run(["ls; ls"], shell=True)
0 голосов
/ 11 февраля 2019

Просто выполните команду дважды.

import subprocess
subprocess.check_call(['ls'])
subprocess.check_call(['ls'])

Это должно быть достаточно быстро.

Редактировать

Если вы хотите выполнить две командыв той же оболочке напишите скрипт оболочки, который их выполняет, и запустите этот скрипт из Python.

...