marcman
marcman

Reputation: 3393

Linux commands in Python subprocesses

I'm executing a set of commands that first require me to call bash. I am trying to automate these commands by writing a Python script to do this. My first command obviously needs to be bash, so I run

p = subprocess.call(['bash'])

and it launches the bash shell no problem.

Where I then have problems is trying to execute the remaining code in the bash environment. I thought perhaps there was a need for process communication (i.e. redirecting stdout as in

p0 = subprocess.Popen(cmd, stdout=subprocess.PIPE)
p1 = subprocess.Popen(['bash'], stdin=p0.stdout)
p1.communicate()

) but the piping doesn't seem to solve my problem.

How can I write this script so that it mimics the following sequential Linux commands?

$ bash
$ cmd1
$ cmd2
...

I'm working with Ubuntu 14.04 and Python 2.7.6.

Thanks in advance for the guidance!

Upvotes: 1

Views: 250

Answers (2)

Satyen Rai
Satyen Rai

Reputation: 1533

You don't need to call run bash separately. You can run something like:

p1 = subprocess.call(['cmd1'])
p2 = subprocess.call(['cmd2'])

If you must run bash for some reason (the commands contain bash statements, for example), you can run bash -c "cmd1; cmd2" from subprocess.call().

Edit: As Busturdust pointed out, you can also try setting shell=True, but that uses sh, not bash. But that may be enough for you.

Upvotes: 1

Busturdust
Busturdust

Reputation: 2495

import subprocess

def bash_command(cmd):
    subprocess.Popen(cmd, shell=True, executable='/bin/bash')

bash_command('[your_command]')

Upvotes: 1

Related Questions