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

从shell脚本执行python脚本(具有参数),python,linux,shell,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

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
启动python脚本
回溯(最近一次呼叫最后一次):
文件“main.py”,第97行,在
main()
文件“main”,第80行,在main中
header=“arg1:{}\n\n”。格式(sys.argv[1])
ValueError:格式为零长度的字段名
完成
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)
。。。
...
def main():
“主要功能
"""
header=“arg1:{}\n\n”。格式(sys.argv[1])
...
...
如果名称=“\uuuuu main\uuuuuuuu”:
如果len(sys.argv)==2:
main()
其他:
打印“\n无效的参数数”
打印“\n用法:”
打印“\n python{}\n.”格式(sys.argv[0])
出口(1)

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

是的,这是正确的。请尝试以下示例:

main.py
你的脚本应该很好用。这是一个玩具样品:

#!/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或更高版本…)。否则,请指定位置参数编号。

您能再精确一点吗?也许有一个玩具的例子?是的,这是正确的,你不工作是什么意思?bash抛出错误,python抛出错误?您的python版本是什么?我们可以获取python脚本吗?@user189更新了main.py内容的问题,我的python版本是2.6.2Change{}-->{0},或者如果可能的话升级到2.7。因此,这不是调用python的问题,而是对python版本使用错误语法的问题。
#!/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))