我想用python创建一个脚本,然后从命令行运行它。该脚本称为test.py
,运行该命令的命令是:
python3 test.py John Jackson
这是预期的输出:
John Jackson
这是我制作的python脚本:
class person:
def __init__(self, first, last):
self.firstname = first
self.lastname = last
def get_first(self):
return self.firstname
def get_last(self):
return self.lastname
import argparse
def main():
parser = argparse.ArgumentParser()
parser.add_argument('first')
parser.add_argument('last')
args = parser.parse_args()
c1 = person(args.first, args.last)
print(c1)
但是问题是当我使用提到的命令从命令行运行脚本时,它什么也不返回。您知道如何解决它并获得预期的输出吗?
答案 0 :(得分:2)
您定义了main()
函数,但没有调用它。
在脚本末尾添加它:
if __name__ == "__main__":
main()
请参见What does if __name__ == “__main__”:
do?。
然后,c1
是person
实例,它将打印:
$ python3 test.py John Jackson
<__main__.person object at 0x104907ef0>
您需要调用get_first()
和get_last()
以获得正确的输出:
print(c1.get_first(), c1.get_last())
答案 1 :(得分:1)
我不确定您是否在运行脚本时正在调用主函数。
添加
if __nam__ == "__main__":
main()
并覆盖人员类的__str__
函数,以在将类作为参数传递给print
时打印名字和姓氏。
def __str__(self):
return self.firstname + ' ' + self.lastname
整个代码是这样的
import argparse
class person:
def __init__(self, first, last):
self.firstname = first
self.lastname = last
def get_first(self):
return self.firstname
def get_last(self):
return self.lastname
def __str__(self):
return self.firstname + ' ' + self.lastname
def main():
parser = argparse.ArgumentParser()
parser.add_argument('first')
parser.add_argument('last')
args = parser.parse_args()
c1 = person(args.first, args.last)
print(c1)
if __name__ == '__main__':
main()
答案 2 :(得分:0)
您的脚本不一定是complex,要实现此目的的一种更简单的方法是使用{的argv
属性{1}}模块然后使用sys
分隔(string)参数,如下所示:
split
您甚至不需要引发错误:
import sys
name = sys.argv[1].split(" ")
if len(name) != 2:
raise ValueError("Invalid first and last name, try using \"John Jackson\" instead.")
[first_name, last_name] = name
print(first_name, last_name)
然后,当您像这样运行脚本时:
import sys
name = sys.argv[1].split(" ")
if len(name) == 2:
[first_name, last_name] = name
print(first_name, last_name)
您应该获得以下输出:
python3 filename.py "John Jackson"
祝你好运。