How do I go about running a bash script using the subprocess module, to which I must give several arguments?

This is what I’m currently using:

subprocess.Popen(['/my/file/path/', 'arg1 arg2 %s' % arg3], \
    shell = True)

The bash script seems not to be taking any of the parameters in. Any insights are greatly appreciated!

Pass arguments as a list, see the very first code example in the docs:

import subprocess

subprocess.check_call(['/my/file/path/', 'arg1', 'arg2', arg3])

If arg3 is not a string; convert it to string before passing to check_call(): arg3 = str(arg3).

subprocess.Popen(['/my/file/path/ arg1 arg2 %s' % arg3], shell = True).

If you use shell = True the script and its arguments have to be passed as a string. Any other elements in the args sequence will be treated as arguments to the shell.

You can find the complete docs at

One more example, which is not included in all the above ones,

subprocess.Popen(['/your/ %s %s %s' %(argument1,argument2,argument3)], shell = True)

Please note that, when you type %(argument1,argument2,argument3), there should not be any space between % and (, eg % (argument1,argument2,argument3) is not valid.

Hi I know that this is solution is quite late, but could help someone.


import subprocess


The above example provides arg1 and arg2 as parameters to the shell script

Essentially, subprocess expects an array. So you could populate an array and provide it as a parameter.

You forgot to add args name.

subprocess.Popen(args=['./', 'arg1 arg2 %s' % arg3], shell=True)

This is how it worked for me

import subprocess
subprocess.Popen(["path/to/", arg1, arg2, arg3])