代码之家  ›  专栏  ›  技术社区  ›  agftrading

是否可以从windows命令提示符运行python脚本,同时传递该脚本的参数?

  •  2
  • agftrading  · 技术社区  · 6 年前

    我有一个保存的python脚本。我在Windows 10的命令提示符下运行这个python脚本。

    这非常简单,只需导航到脚本所在的目录,然后键入:

    python myscript.py
    

    脚本运行正常。

    但是,有时,我希望运行此脚本,以便该脚本中的变量设置为一个值,有时设置为另一个值。此变量告诉脚本要通过哪个端口操作API连接(如果相关)。

    此时,我每次都会进入脚本,将变量更改为我想要的变量,然后运行脚本。是否有方法在Windows 10中从命令提示符运行脚本时设置变量?

    或者是否有其他有效的解决方案可以在运行时实现同样的灵活性?

    谢谢

    3 回复  |  直到 6 年前
        1
  •  3
  •   abarnert    6 年前

    通常的方法是使用命令行参数。事实上,在传递文件名列表之后,传递端口号几乎就是命令行参数的范例。


    对于简单的情况,可以在代码中使用 sys.argv

    port = int(sys.argv[1])
    

    或者,如果需要默认值:

    port = int(sys.argv[1]) if len(sys.argv) > 1 else 12345
    

    然后,要运行程序:

    python myscript.py 54321
    

    对于更复杂的情况,当您有多个标志时,有些标志带有值,等等,您通常希望使用以下内容 argparse 但是,在设计第一个工具之前,您可能需要阅读一些典型的命令行界面,并且可能需要查看常用工具的参数。因为只要看看 argparse 如果事先不知道自己想要什么,可能会让人不知所措。


    另一种选择是使用环境变量。如果您想在每次运行时更改它,那么这会更加繁琐,但是如果您想在命令行会话中为整个系列的运行设置一次,甚至设置计算机范围的默认值,那么这会容易得多。

    在代码中,您可以查看 os.environ :

    port = int(os.environ.get('MYSCRIPT_PORT', 12345))
    

    然后,要设置端口:

    MYSCRIPT_PORT=54321
    python myscript.py
    

    您可以将两者结合起来:使用命令行参数(如果存在),否则返回到环境变量,否则返回到默认值。甚至可以添加配置文件和/或(如果您只关心Windows)注册表设置。Python本身就像许多主要服务器一样,有三步回退的功能,但对于您的简单用例来说,这可能有些过头了。

        2
  •  1
  •   Vincent Morris    6 年前

    您应该看看argparse。以下是一个示例:

    import argparse
    
    parser = argparse.ArgumentParser()
    parser.add_argument("-m", help='message to be sent', type=str)
    args = (parser.parse_args())
    
    print args.m
    

    您创建的每个参数都像字典一样保存,因此您必须在代码中调用它,就像我对print语句所做的那样

    "args.m" < ---- This specifies the argument passed you want to do stuff with
    

    这是我的输入/输出:

    C:\Users\Vinny\Desktop>python argtest.py -m "Hi"
    Hi
    
    C:\Users\Vinny\Desktop>
    

    有关argparse的更多信息: https://docs.python.org/3/library/argparse.html