Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
让python在没有for循环的情况下第二次运行外部程序之前等待_Python_Windows_Cmd_Marc - Fatal编程技术网

让python在没有for循环的情况下第二次运行外部程序之前等待

让python在没有for循环的情况下第二次运行外部程序之前等待,python,windows,cmd,marc,Python,Windows,Cmd,Marc,我使用VisualDoc在有限元软件(MSC MARC)中迭代材料属性。 我遇到的问题是VisualDoc一次执行多个FEM模拟窗口,我需要FEM程序一次执行一次 在visualdoc中,MARC程序的调用如下:调用cmd批处理文件,打开python脚本,打开MARC模拟。(我尝试了多种方法从VisualDOC给MARC打电话,这是唯一有效的方法) 首先,我尝试将MARC软件设置为非批处理模式,但找不到相应的设置 目前,我正在尝试编写一个使用 Popen及其附带的wait()函数,但我手动要求P

我使用VisualDoc在有限元软件(MSC MARC)中迭代材料属性。 我遇到的问题是VisualDoc一次执行多个FEM模拟窗口,我需要FEM程序一次执行一次

在visualdoc中,MARC程序的调用如下:调用cmd批处理文件,打开python脚本,打开MARC模拟。(我尝试了多种方法从VisualDOC给MARC打电话,这是唯一有效的方法)

首先,我尝试将MARC软件设置为非批处理模式,但找不到相应的设置

目前,我正在尝试编写一个使用 Popen及其附带的wait()函数,但我手动要求Python在第一次MARC运行仍在执行时再次运行,并且它仍打开了第二次MARC模拟。有没有办法强制Python在打开下一次运行之前等待程序完成执行

p = subprocess.Popen(["procedure.proc"], shell = True)
p.wait()
我曾想过尝试使用cmd实现同样的效果,但由于python打开了MARC程序,我认为最好将等待编码为python。我的假设是对的,还是通过cmd强制执行等待更好

当前cmd代码如下所示:

CD C:\INTERFACEMARC\loop
openmarc.py
注意: 我无法使用for循环,因为python脚本应该只打开MARC程序一次,以便使用VisualDoc优化代码


目前,打开MARC的代码如下所示,但据我所知,这并不能阻止python脚本在MARC仍在运行时再次执行(基于我的手动测试)。

Popen
with
shell=True
正在运行
cmd/c”procedure.proc
。cmd应该等待该命令退出,但只有当它可以退出时,即如果
ShellExecuteEx
返回
procedure.proc
的进程句柄。在Python中,
p.wait()
依次等待cmd退出。使用Python运行
procedure.proc
而不是简单地在批处理脚本中运行它的目的是什么?顺便说一句,对于
Popen
,不要使用带有
shell=True
的参数列表。仅使用默认值为
shell=False
的参数列表。感谢您的快速回复!我真的让这个程序运行起来了。似乎VisualDOC会等待python脚本完成运行,然后再进入迭代过程中的下一步,所以当我将Popen代码与VisualDOC一起使用时;Python会在MARC关闭之前等待它完成运行,这样做会迫使VisualDOC优化一次只打开一个MARC窗口。我尝试直接从cmd运行批处理脚本,但无法在VisualDOC中运行。您的
Popen
命令通过cmd执行,后者通过系统外壳函数
ShellExecuteEx
运行procedure.proc。因此.proc必须是系统上注册的文件类型。您应该能够在批处理脚本中用procedure.proc替换openmarc.py——除非openmarc.py执行您没有显示的其他操作。要避免在cmd的批处理模式下运行时等待procedure.proc,请使用
启动procedure.proc