Patrick
Patrick

Reputation: 2544

Executing python script(having arguments) from shell script

myfile.sh

#!/bin/bash
echo -e "\n starting python script"
python main.py arg1
echo -e "\n done"

This is not working.

Above file has given following error

starting python script
Traceback (most recent call last):
  File "main.py", line 97, in <module>
    main()
  File "main", line 80, in main
    header = "arg1: {}\n\n".format(sys.argv[1])
ValueError: zero length field name in format

done

main.py

...
...
def main():
    """ main function
    """

    header = "arg1: {}\n\n".format(sys.argv[1])
    ...
    ...


if __name__ == "__main__":

    if len(sys.argv) == 2:
        main()
    else:
        print "\n Invalid no. of arguments"
        print "\n Usage:"
        print "\n python {} <date>\n".format(sys.argv[0])
        exit(1)

Whats the correct syntax to call a python script having arguments from shell script ?

Upvotes: 0

Views: 266

Answers (2)

FredrikHedman
FredrikHedman

Reputation: 1253

Your script should work fine. Here is a toy sample:

#!/bin/bash
echo -e "\n starting python script"
python main.py arg1 arg2 arg3
echo -e "\n done"

with main.py as

#!/usr/bin/env python
from __future__ import print_function
import sys

print("In python pgm called from shell script with args:")
for i, a in enumerate(sys.argv):
    print("argument {0} is {1}".format(i, a))

The error is probably caused by the '{}'. Need to have a recent enough python version for that to work (2.7 or better to be on the safe side...). Otherwise specify the positional argument numbers.

Upvotes: 2

enrico.bacis
enrico.bacis

Reputation: 31484

Yes, this is correct. Try this for example:

main.py

import sys
print sys.argv[1]

Upvotes: 0

Related Questions