Python: как запустить несколько команд в одном процессе, используя popen - PullRequest
5 голосов
/ 10 марта 2012

Я хочу открыть процесс и запустить две команды в одном процессе. У меня есть:

cmd1 = 'source /usr/local/../..'
cmd2 = 'ls -l'
final = Popen(cmd2, shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True)
stdout, nothing = final.communicate()
log = open('log', 'w')
log.write(stdout)
log.close()

Если я использую popen два раза, эти две команды будут выполняться в разных процессах. Но я хочу, чтобы они запускались в одной оболочке.

1 Ответ

5 голосов
/ 15 мая 2012

Команды всегда будут двумя (unix) процессами, но вы можете запустить их с одного вызова Popen и одной и той же оболочки, используя:

from subprocess import Popen, PIPE, STDOUT

cmd1 = 'echo "hello world"'
cmd2 = 'ls -l'
final = Popen("{}; {}".format(cmd1, cmd2), shell=True, stdin=PIPE, 
          stdout=PIPE, stderr=STDOUT, close_fds=True)
stdout, nothing = final.communicate()
log = open('log', 'w')
log.write(stdout)
log.close()

После запуска программы файл 'log'содержит:

hello world
total 4
-rw-rw-r-- 1 anthon users 303 2012-05-15 09:44 test.py
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...