在Python for循环中使用subprocess.call()时行为不稳定

在Python for循环中使用subprocess.call()时行为不稳定,python,for-loop,cmd,subprocess,Python,For Loop,Cmd,Subprocess,在我下面附带的脚本中,我尝试使用Python实现一个非常简单的过程按顺序执行本机Windows命令,以及从免费、便携程序调用可执行文件。但是subprocess.call()函数未按预期运行 我正在经历的行为: ~调用ONE变量,然后像我期望的那样停止/等待,但当我退出ONE(taskmgr)时,它同时启动TWO和TWO,然后等待 ~当我退出THREE时,它同时调用两个可移植程序FOUR和FIVE,并等待 ~然后启动SIX并等待 ~最后,它会在不暂停的情况下同时执行其余的命令 对这种行为的原因有

在我下面附带的脚本中,我尝试使用Python实现一个非常简单的过程按顺序执行本机Windows命令,以及从免费、便携程序调用可执行文件。但是
subprocess.call()
函数未按预期运行

我正在经历的行为:

~调用
ONE
变量,然后像我期望的那样停止/等待,但当我退出
ONE
(taskmgr)时,它同时启动
TWO
TWO
,然后等待

~当我退出
THREE
时,它同时调用两个可移植程序
FOUR
FIVE
,并等待

~然后启动
SIX
并等待

~最后,它会在不暂停的情况下同时执行其余的命令

对这种行为的原因有什么解释吗?和/或实现相同结果的建议解决方案

import subprocess

def AutoCommands():
    ONE = 'taskmgr /0 /startup'
    TWO = 'taskschd.msc'
    THREE = 'services.msc'
    FOUR = '"%CD%/FolderDirectory/PortableProgram" -custom -flags'
    FIVE = '"%CD%/FolderDirectory/PortableProgram2" -more -flags'
    SIX = '"%CD%/FolderDirectory/PortableProgram3" -more -flags'
    SEVEN = '"appwiz.cpl"'
    EIGHT = 'wuapp'

    autocommands = [ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT]

    for command in autocommands:
        subprocess.call(command, shell=True)

AutoCommands()
编辑:我希望/希望执行每个命令,但在当前命令被取消/终止之前,不要移动到下一个命令。类似于使用
start/wait program.exe和&program2.exe
等。。。我已经在
.bat
中编写了上述脚本,它按照您的预期运行,在命令之间等待。但是,如果我尝试使用
os.system()
subprocess.Popen()
执行该
.bat
,它会表现出相同的行为。如果我直接尝试使用
os.system(“start/wait program.exe&&start/wait program2.exe”)
它会表现出相同的行为


我还尝试了使用
subprocess.Popen
(不是我想要使用的)的建议,但根本无法使其起作用。

打印subprocess.call的返回代码;确保它们没有出错。如果在Windows控制台中手动运行完全相同的命令,会发生什么情况。如果从Python运行命令,您是否希望得到不同的结果?运行:
子流程。检查\u调用(“\n”。join(autocommands),shell=True)
(如果失败,请尝试
”;“
”&“
”,而不是
”。\n“
)。当我手动执行命令时,它会执行我希望它执行的操作。是的,我希望在Python中运行时会得到不同的结果,因为
.call()
函数。我希望它执行一个命令并等待该命令被取消/退出。类似于在此处使用
启动/等待命令
或使用
&&
等。。。我甚至试着用上面的脚本示例制作一个
.bat
文件,它工作得很好(在命令之间等待),但是即使我使用
os.system(./batchfile.bat)
subprocess.Popen(./batchfile.bat)打开
.bat
它具有与问题中提到的相同的初始行为。此外,您建议的命令只是将指定字符放在每个命令的每个字母之间,并返回一个“非零退出状态”@bigenerary:1。如果手动运行该命令时没有立即返回,那么在Python中也不会立即返回(如果使用
check\u call()
)。2.“将指定字符放在每个字母之间”--不,不会<代码>自动命令是一个列表:
“&”.join([“第一”、“第二”])
->
“第一和第二”
。我最好的猜测是您的命令无法启动,这就是为什么您会看到它们立即返回的原因,这就是为什么我建议
check\u call()
引发异常,而不是默默地忽略错误。