【问题标题】:running the python script in command line does not print any output在命令行中运行 python 脚本不会打印任何输出
【发布时间】:2019-10-05 12:29:13
【问题描述】:

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

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

【问题讨论】:

  • 我解决了这个问题,但仍然没有结果。
  • Python 不会自动运行名为 main 的函数。其他一些语言可能会这样做,但 Python 不会。

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


【解决方案1】:

您定义了 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())

【讨论】:

    【解决方案2】:

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

    添加

    if __name__ == "__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()
    

    【讨论】:

      【解决方案3】:

      你的脚本是不必要的complex,一个更简单的方法来实现这一点(很多)是使用sys模块的argv属性然后使用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"
      

      你应该得到以下输出:

      John Jackson
      

      祝你好运。

      【讨论】:

        猜你喜欢
        • 2014-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-12
        • 2018-07-24
        • 2012-05-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多