Запустить встроенные команды BASH в Python? - PullRequest
17 голосов
/ 28 марта 2011

Есть ли способ запустить встроенные команды BASH из Python?

Я пытался:

subprocess.Popen(['bash','history'],shell=True, stdout=PIPE)

subprocess.Popen('history', shell=True, executable = "/bin/bash", stdout=subprocess.PIPE)

os.system('history')

и множество их вариаций. Я хотел бы запустить history или fc -ln.

Ответы [ 2 ]

16 голосов
/ 30 марта 2011

Я наконец нашел решение, которое работает.

from subprocess import Popen, PIPE, STDOUT
shell_command = 'bash -i -c "history -r; history"'
event = Popen(shell_command, shell=True, stdin=PIPE, stdout=PIPE, 
    stderr=STDOUT)

output = event.communicate()

Спасибо всем за ввод.

14 голосов
/ 28 марта 2011
subprocess.Popen(["bash", "-c", "type type"])

это вызывает bash и говорит bash запустить строку type type, которая запускает встроенную команду type для аргумента type.

output: type is a shell builtin

часть после -c должна быть одной строкой.это не будет работать: ["bash", "-c", "type", "type"]

...