【问题标题】:Python: command line, sys.argv, "if __name__ == '__main__' "Python:命令行,sys.argv,“如果 __name__ == '__main__'”
【发布时间】:2020-10-01 15:37:03
【问题描述】:

我在 Jupyter 中使用 Python 有一定的经验,但对如何使用命令行却一无所知。我有家庭作业的提示 - 我了解算法的工作原理,但我不知道如何格式化所有内容,以便它以指定的方式从命令行工作。

提示:

问题 1:80 分

输入:指定旅行问题的文本文件(参见 travel-input.txt 对于格式)和搜索算法 (更多详情如下)。

python map.py [file] [search] 应该是 来自“文件”的旅行问题并运行“搜索”算法找到 一个解法。它将打印解决方案及其成本。

搜索是其中之一 [DFTS、DFGS、BFTS、BFGS、UCTS、UCGS、GBFTS、GBFGS、ASTS、ASGS]

这是给我的模板:

from search import ... # TODO import the necessary classes and methods
import sys

if __name__ == '__main__':
    
    input_file = sys.argv[1]
    search_algo_str = sys.argv[2]
    
    # TODO implement
    
    goal_node = ... # TODO call the appropriate search function with appropriate parameters
    
    # Do not change the code below.
    if goal_node is not None:
        print("Solution path", goal_node.solution())
        print("Solution cost", goal_node.path_cost)
    else:
        print("No solution was found.")

就python map.py [file] [search] 而言,“文件”指的是travel-input.txt,“搜索”指的是DFTS, DFGS, BFTS,...等之一——用户指定的选择。我的问题:

  1. 我应该把我的搜索功能放在哪里?它们是否应该都在同一个代码块中背靠背?
  2. 如何让命令行从四个或五个字母的代码中识别每个函数?它只是函数的名称吗?如果我只使用这些字母来调用它,函数如何接收输入?
  3. 是否需要在代码中的任何位置引用输入文件?
  4. 我保存文件的位置是否重要,以便可以从命令行访问它们 - .py 文件、travel-input.txt 等?我尝试从命令行访问它们,但没有成功。

感谢您的帮助!

【问题讨论】:

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


    【解决方案1】:

    函数定义位于if __name__ == "__main__" 块之前。要选择正确的功能,您可以将它们放在一个字典中并使用四个字母的缩写作为键,即

    def dfts_search(...):
        ...
    
    def dfgs_search(...):
        ....
    
    ...
    
    if __name__ == "__main__":
    
        input_file = sys.argv[1]
        search_algo_str = sys.argv[2]
        
        search_dict = {"DFTS": dfts_search, "DFGS": dfgs_search, ...}
    
        try:
            func = search_dict[search_algo_str]
            result = func(...)
        except KeyError:
            print(f'{search_algo_str} is an unknown search algorithm')
    

    不确定您所说的引用是什么意思,但input_file 已经引用了输入文件。您需要编写一个函数来读取文件并处理内容。

    文件的位置不应该太重要。将所有内容放在同一目录中可能是最简单的。在命令窗口中,只需 cd 到文件所在的目录并按照作业中的说明运行脚本。

    【讨论】:

      猜你喜欢
      • 2017-05-19
      • 1970-01-01
      • 1970-01-01
      • 2018-03-13
      • 2013-12-11
      • 2020-05-29
      • 2020-06-05
      • 2015-09-12
      • 2016-12-22
      相关资源
      最近更新 更多