在命令行中运行python脚本不会显示任何输出

时间:2019-05-18 12:16:50

标签: python python-3.x command-line argparse

我想用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)

但是问题是当我使用提到的命令从命令行运行脚本时,它什么也不返回。您知道如何解决它并获得预期的输出吗?

3 个答案:

答案 0 :(得分:2)

您定义了main()函数,但没有调用它。

在脚本末尾添加它:

if __name__ == "__main__":
    main()

请参见What does if __name__ == “__main__”: do?

然后,c1person实例,它将打印:

$ 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"

祝你好运。