问题描述
我是使用os.system的新手(在Python 3中),并且正在尝试执行通常在Linux终端中运行的程序。我需要迭代几次,并且正在使用类似以下循环的内容:
for item in item_list:
os.system("gnome-terminal -- program_execute "+item)
问题在于此循环同时打开n
终端窗口(我的item_list
的长度为n
)并同时执行所有窗口。我的问题是:
如何运行循环len(item_list)
次,而下一次运行仅在当前循环完成后才开始?
我不能使用sleep()
,因为运行时间因项目而异,并且我想优化流程。
编辑:我尝试使用.communicate()和.wait()失败。我希望os.system(或os.subprocess)了解gnome-terminal仍在运行,仅在上一个循环的gnome-terminal关闭后才通过循环中的下一个元素。
解决方法
我在下面的代码中使用了子流程,它可以正常工作,即该软件运行一次并在进入下一个循环之前完全完成。
for item in item_list:
subprocess.call(["gnome-terminal","--disable-factory","--","my_command"])