在命令行中运行 python 脚本不会打印任何输出

Joh*_*ohn 5 python command-line argparse python-3.x

我想用 python 编写一个脚本,然后从命令行运行它。调用脚本test.py并运行它的命令是:

python3 test.py John Jackson
Run Code Online (Sandbox Code Playgroud)

这是预期的输出:

John Jackson
Run Code Online (Sandbox Code Playgroud)

这是我制作的 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)
Run Code Online (Sandbox Code Playgroud)

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

Gin*_*pin 5

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

\n\n

将其添加到脚本末尾:

\n\n
if __name__ == "__main__":\n    main()\n
Run Code Online (Sandbox Code Playgroud)\n\n

看看有什么if __name__ == \xe2\x80\x9c__main__\xe2\x80\x9d:作用?

\n\n

然后c1person实例,它将打印:

\n\n
$ python3 test.py John Jackson\n<__main__.person object at 0x104907ef0>\n
Run Code Online (Sandbox Code Playgroud)\n\n

您需要调用get_first()get_last()以获得正确的输出:

\n\n
print(c1.get_first(), c1.get_last())\n
Run Code Online (Sandbox Code Playgroud)\n


Akh*_*tra 2

我不确定您是否在运行脚本时调用主函数。

添加

if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

并重写__str__person 类的函数以打印名字和姓氏,同时将类作为参数传递给print.

def __str__(self):
    return self.firstname + ' ' + self.lastname
Run Code Online (Sandbox Code Playgroud)

整个代码是这样的

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()
Run Code Online (Sandbox Code Playgroud)