简体   繁体   中英

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 ?

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.

Yes, this is correct. Try this for example:

main.py

import sys
print sys.argv[1]

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM