使用Python

时间:2016-01-07 10:43:13

标签: python-2.7 batch-file

@ECHO OFF

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

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

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

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

2 个答案:

答案 0 :(得分:0)

虽然我不熟悉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%

答案 1 :(得分:0)

有两种方法可行:

  • 传递命令行上的值(需要.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)以提供密码。还有其他甚至更好的方法,但它们有时很难实现,也不完全安全。

相关问题