从shell脚本执行python脚本(有参数)

时间:2014-08-11 12:30:28

标签: python linux shell

myfile.sh

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

这不起作用。

以上文件提供了以下错误

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)

调用带有shell脚本参数的python脚本的正确语法是什么?

2 个答案:

答案 0 :(得分:2)

你的脚本应该可以正常工作。这是一个玩具样本:

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

将main.py作为

#!/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))

错误可能是由“{}”引起的。需要有一个最近足够的python版本才能工作(2.7或更好的安全方面...)。否则,请指定位置参数编号。

答案 1 :(得分:0)

是的,这是正确的。试试这个例子:

main.py

import sys
print sys.argv[1]