ENZ*_*SIO 3 python subprocess kill system-calls
是否有适当的方法来创建一个脚本,该脚本循环遍历文件夹中的文件并执行可以用Ctrl C在外部终止的子进程?我在管道中嵌入了类似以下内容的内容,当主进程被杀死时,无法从命令行Ctrl C进行操作。
示例脚本:
import subprocess
import os
import sys
input_directory = sys.argv[1]
for file in os.listdir(os.path.abspath(input_directory)):
output = file + "_out.out"
command = ['somescript.py', file, output]
try:
subprocess.check_call(command)
except:
print "Command Failed"
Run Code Online (Sandbox Code Playgroud)
然后我将执行程序:
Example_script.py /path/to/some/directory/containing/files/
Run Code Online (Sandbox Code Playgroud)
在循环时,如果我看到命令失败,我想使用CtrlC。但是,尽管主脚本已被Ctrl C销毁,但它仍然失败并继续运行其他子进程。是否有适当的方式编写这样的代码可以使用Ctrl C杀死孩子(其他子过程)?
任何帮助,或指出我的方向,不胜感激。我目前正在寻找一种好方法。
您在try / except块中拥有的内容太宽容,以致于在按下Ctrl+ 时C,该KeyboardInterrupt
异常也由与相同的异常处理程序进行处理print "Command Failed"
,并且由于现在已经在那里正确处理,因此程序流为继续通过for循环。您应该做的是:
except:
,except Exception:
这样KeyboardInterrupt
就不会捕获异常,以便在任何时候按下Ctrl+ C,程序都将终止(包括未陷入某些不可终止状态的子流程);print
声明之后break
,如果这是您希望此程序执行的预期行为,请跳出循环以防止进一步执行。