使用Python subprocess.call将变量传递到BAT文件

使用Python subprocess.call将变量传递到BAT文件,python,batch-file,subprocess,Python,Batch File,Subprocess,当我使用以下命令将变量传递给BAT文件时: from subprocess import call # Prompt for UID UID = raw_input('Enter UID: ') # Prompt for password PSWD= raw_input('Enter your password: ') dir = r"f:\_Python" cmdline = "setENVvariables.bat UID, PSWD" rc=call("start cmd /K " +

当我使用以下命令将变量传递给BAT文件时:

from subprocess import call
# Prompt for UID
UID = raw_input('Enter UID: ')

# Prompt for password
PSWD= raw_input('Enter your password: ')

dir = r"f:\_Python"
cmdline = "setENVvariables.bat UID, PSWD"
rc=call("start cmd /K " + cmdline, cwd=dir, shell=True)
。。未传递这些值。当我回显BAT文件中的输入时,我得到了Python变量名

蝙蝠锉

echo %1
echo %2
BAT文件输出

f:\_Python>echo UID
UID

f:\_Python>echo PSWD
PSWD

f:\_Python>

您正在调用一个shell来运行start,它将运行CMD来运行您的BAT文件

这意味着您想运行一个子流程,但最终却启动了四个子流程

不要使用shell=True 除非你真的需要,否则不要使用start 不要执行CMD 通过执行此操作,您只需将参数作为列表传递即可:

dir = r"f:\_Python"
cmdline = ["setENVvariables.bat", UID, PSWD]
rc = call(cmdline, cwd=dir)

setENVvariables.batuid,PSWD中的PSWD只是四个字符的PSWD,而不是用户实际键入的变量。我投票以打字错误的形式结束,因为你在下面的一行正确地附加了字符串。另外,你希望UID从哪里来?给定脚本名setENVvariables.bat,我怀疑这是否非常有效,因为如果脚本设置了一些变量,它们在脚本退出后就会丢失。@Jean Françoisfare谁知道呢,也许它在调用某个程序之前设置了一些环境变量。。。