2016-01-07 159 views
1
@ECHO OFF 

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

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

对于给定的上述.bat文件。我如何通过使用Python使用Python将参数传递到批处理文件

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

回答

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% 
+0

我想写这将打开批处理文件的Python脚本的自动化和价值传递给它 –

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命令,只有执行他们,如果环境变量没有设置和值分配给ENV熨烫变量。另请注意,USERNAME是Windows环境中已经存在的变量,因此您不希望将其用于此目的。这就是为什么我选择USER_NAME

安全买者:这通常被认为是一件坏事™把密码命令行(或环境中,这两者都是很容易接触到机器上运行的其他程序)上。有时候必须完成,但如果可能的话应该避免。在这个程序中,您可以让Python脚本将输入发送到cmd脚本(proc.communicate(),我认为和SET /P在.CMD脚本中)以提供密码。还有其他更好的方法,但它们有时很麻烦,而且也不完全安全。

相关问题