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脚本的正确语法是什么?
答案 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)
是的,这是正确的。试试这个例子:
import sys
print sys.argv[1]