【问题标题】:Passing arguments to the batch file using Python使用 Python 将参数传递给批处理文件
【发布时间】:2024-05-20 04:40:02
【问题描述】:
@ECHO OFF

:Start
      SET /P Enter user name:
      SET /P Enter Password:

      SET /P Enter age:
      SET /p Enter Passeword:

对于上面给出的 .bat 文件。如何使用 PYTHON 传递参数

我想编写调用批处理文件并在批处理文件中传递所需参数的 Python 自动化脚本

【问题讨论】:

    标签: python-2.7 batch-file


    【解决方案1】:

    虽然我不熟悉python但你需要检查命令行然后使用python.exe

    你需要像这样返工你的批次:

    @ECHO OFF
    
    :Start
          SET /P user_name=Enter user name:
          SET /P password=Enter Password:
    
          SET /P user_age=Enter age:
          SET /p passEword=Enter Passeword:
    

    然后:

    call python.exe %user_name% %password% %user_age% %passEword%
    

    【讨论】:

    • 我想编写 python 自动化脚本来打开批处理文件并将值传递给它
    【解决方案2】:

    有两种可行的方法:

    • 在命令行上传递值(需要 .CMD 脚本来解析命令行——繁琐,恕我直言)
    • 通过环境传递值(需要 .CMD 脚本查看是否在请求变量之前定义了变量)

    后者的示例实现可能是:

    from subprocess import Popen
    import os
    
    command = [
        'mybatch.cmd'
    ]
    
    params_by_env = {}
    
    # "inherit" the current environment
    for k,v in os.environ.items(): params_by_env[k] = v
    
    # Specify the envvars for mybatch.cmd
    params_by_env['USER_NAME'] = 'billg'
    params_by_env['PASSWORD'] = 'killfree'
    params_by_env['AGE'] = '60'
    params_by_env['PASSEWORD'] = 'pa$$ew0rd'
    
    proc = Popen(command,env=params_by_env)
    proc.wait()
    
    print "Finished"
    

    .CMD 脚本的修改版本可能如下所示:

    @SETLOCAL
    @ECHO OFF
    
    :Start
          IF "%USER_NAME%"=="" SET /P USER_NAME=Enter user name:
          IF "%PASSWORD%"=="" SET /P PASSWORD=Enter Password:
    
          IF "%AGE%"=="" SET /P AGE=Enter age:
          IF "%PASSEWORD%"=="" SET /p PASSEWORD=Enter Passeword:
    
    @ECHO Username: %USER_NAME%
    @ECHO Password: %PASSWORD%
    @ECHO Age: %AGE%
    @ECHO Passeword: %PASSEWORD%
    

    注意SET /P 命令的更改,仅在未设置环境变量并将值分配给环境变量时才执行它们。另请注意,USERNAME 是 Windows 环境中已经存在的变量,因此您不希望将其用于此目的。这就是我选择USER_NAME 的原因。

    安全警告:通常认为将密码放在命令行(或环境中——机器上运行的其他程序都可以轻松访问这两者)是一件坏事™ .有时必须这样做,但应尽可能避免。对于这个程序,您可以让 Python 脚本将输入发送到 cmd 脚本(我认为是 proc.communicate(),在 .CMD 脚本中是 SET /P)以提供密码。还有其他更好的方法,但有时实施起来很麻烦,而且也不是完全安全。

    【讨论】:

      最近更新 更多