Python - 如何在父脚本停止时停止子进程

时间:2018-02-22 14:33:49

标签: python subprocess

如何在父进程停止时退出子进程?

以下是我的代码。

我想在有KeyboardInterrupt时停止所有执行。

import os, sys
scripts = ["script_1.py","script_2.py"]
try:
    for script in scripts:
        command = 'python ' + script
        os.system(command)
except KeyboardInterrupt:
    os._exit(1)
except Exception as e:
    raise e

1 个答案:

答案 0 :(得分:0)

由于您尝试在另一个Python脚本中执行Python脚本,让我们以Pythonic方式执行此操作,并为importlib.import_module删除os.system

import os
import importlib

scripts = ['script_1.py', 'script_2.py']

for filename in scripts:
    modulename, ext = os.path.splitext(filename)
    importlib.import_module(modulename)

如果您的脚本如下:

if __name__ == '__main__':
     # code here
     print('hello')

它不起作用,因为if __name__ == '__main__':用于确保仅当文件作为脚本(而不是模块)执行时才会执行if下的部分。

因此,在这种情况下,最好的办法是:

script_1.py

def main():
    # code here
    print('hello') 

在主脚本中:

import os
import importlib

scripts = ['script_1.py', 'script_2.py']

for filename in scripts:
    modulename, ext = os.path.splitext(filename)
    module = importlib.import_module(modulename)
    module.main()