Home > front end >  How to Pass multiple arguments with values to executable via Python3?
How to Pass multiple arguments with values to executable via Python3?

Time:04-21

I am trying to run a windows executable via python3 and have below code snippet. The arguments can be of the form key-value pair but its possible that few arguments may not have value like arg1 below. arg2 needs to have a value which is passed as creating arg2 variable below. The data.filepath needs to be used to construct arg2

 # data.filepath resolves to \\server1\data\inputs\filename.txt
 arg2 = "--arg2 {}".format(data.filepath)  
child = subprocess.Popen([output_path, "--arg1", arg2, "--arg3 val3", "--arg4 val4"],
                         shell=False, stderr=subprocess.STDOUT)
child.communicate()[0]
rc = child.returncode

But seems that i am not following correct syntax and getting error as below

Throw location unknown (consider using BOOST_THROW_EXCEPTION)
Dynamic exception type: class boost::exception_detail::clone_impl<struct boost::exception_detail::error_info_injector<class boost::program_options::unknown_option> >
std::exception::what: unrecognised option '--arg2 \\server1\data\inputs\filename.txt'

Please let me know the right syntax in python to pass arguments to executables properly.

CodePudding user response:

Apparently, the program you are running expects to receive an argument and its value as separate strings (which makes a lot of sense). You can do something like

if phase_of_moon() == 'waxing gibbous':
    arg2 = ['--arg2', data.filepath]
else:
    arg2 = []
x = Popen([output_path, '--arg1', *arg2, '--arg3', val3])

using iterable unpacking to expand arg2.

  • Related