How do you run multiple commands in python?

If I run echo a; echo b in bash the result will be that both commands are run. However if I use subprocess then the first command is run, printing out the whole of the rest of the line. The code below echos a; echo b instead of a b, how do I get it to run both commands?

import subprocess, shlex
def subprocess_cmd(command):
    process = subprocess.Popen(shlex.split(command), stdout=subprocess.PIPE)
    proc_stdout = process.communicate()[0].strip() 
    print proc_stdout

subprocess_cmd("echo a; echo b")

asked Jul 19, 2013 at 9:36

1

You have to use shell=True in subprocess and no shlex.split:

import subprocess

command = "echo a; echo b"

ret = subprocess.run(command, capture_output=True, shell=True)

# before Python 3.7:
# ret = subprocess.run(command, stdout=subprocess.PIPE, shell=True)

print(ret.stdout.decode())

returns:

a
b

Nico Schlömer

48.7k24 gold badges186 silver badges223 bronze badges

answered Jul 19, 2013 at 10:11

How do you run multiple commands in python?

bouguibougui

3,2993 gold badges21 silver badges26 bronze badges

5

I just stumbled on a situation where I needed to run a bunch of lines of bash code (not separated with semicolons) from within python. In this scenario the proposed solutions do not help. One approach would be to save a file and then run it with Popen, but it wasn't possible in my situation.

What I ended up doing is something like:

commands = '''
echo "a"
echo "b"
echo "c"
echo "d"
'''

process = subprocess.Popen('/bin/bash', stdin=subprocess.PIPE, stdout=subprocess.PIPE)
out, err = process.communicate(commands)
print out

So I first create the child bash process and after I tell it what to execute. This approach removes the limitations of passing the command directly to the Popen constructor.

answered Mar 26, 2015 at 1:01

admenvaadmenva

2,28118 silver badges12 bronze badges

3

Join commands with "&&".

os.system('echo a > outputa.txt && echo b > outputb.txt')

answered Aug 29, 2016 at 21:25

5

If you're only running the commands in one shot then you can just use subprocess.check_output convenience function:

def subprocess_cmd(command):
    output = subprocess.check_output(command, shell=True)
    print output

answered Feb 21, 2017 at 19:16

PierzPierz

5,90843 silver badges57 bronze badges

>>> command = "echo a; echo b"
>>> shlex.split(command);
    ['echo', 'a; echo', 'b']

so, the problem is shlex module do not handle ";"

answered Jul 19, 2013 at 10:00

David.ZhengDavid.Zheng

8838 silver badges6 bronze badges

2

import subprocess
cmd = "vsish -e ls /vmkModules/lsom/disks/  | cut -d '/' -f 1  | while read diskID  ; do echo $diskID; vsish -e cat /vmkModules/lsom/disks/$diskID/virstoStats | grep -iE 'Delete pending |trims currently queued' ;  echo '====================' ;done ;"


def subprocess_cmd(command):
    process = subprocess.Popen(command,stdout=subprocess.PIPE, shell=True)
    proc_stdout = process.communicate()[0].strip()
    for line in proc_stdout.decode().split('\n'):
        print (line)

subprocess_cmd(cmd)

answered Jan 25, 2021 at 15:51

2

Got errors like when I used capture_output=True

TypeError: __init__() got an unexpected keyword argument 'capture_output'

After made changes like as below and its works fine

import subprocess

command = '''ls'''

result = subprocess.run(command, stdout=subprocess.PIPE,shell=True)

print(result.stdout.splitlines())

answered Jun 17 at 4:11

How do you run multiple commands in python?

Nanda ThotaNanda Thota

1352 silver badges6 bronze badges

2

How do I run multiple commands in Python?

Run Multiple Commands at Once In windows: You can use the & operator to concatenate two commands. In Linux: You can use the | operator to concatenate two commands. The first command will list the files and folders in the directory, and the second command will print the output All the files and folders are listed.

How do you add multiple commands in Python?

We can start multiple commands as a single job through three steps: Combining the commands – We can use “;“, “&&“, or “||“ to concatenate our commands, depending on the requirement of conditional logic, for example: cmd1; cmd2 && cmd3 || cmd4.

How do you run multiple commands in one script?

Using the Semicolon (;) Operator Segmenting a chain of commands with the semicolon is the most common practice when you want to run multiple commands in a terminal.

Can you run multiple commands?

It won't matter that first command has run successfully or not. But if you want to run the second command, after the success of the first command. Then, enter “&&” sign between your two commands. The third case is, the second command will run only if the first command has not executed successfully.