【发布时间】:2019-03-21 03:30:16
【问题描述】:
有没有合适的方法来创建一个循环遍历文件夹中的文件并执行一个可以用 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"
然后我会执行程序:
Example_script.py /path/to/some/directory/containing/files/
当它在循环时,如果我看到命令失败,我想使用 Ctrl C。但是,尽管主脚本已经用 Ctrl C 破坏了,但它失败并继续运行其他子进程。有没有合适的方法来写一些东西像这样可以用Ctrl C杀死孩子(额外的子进程)?
非常感谢任何帮助或指出我的方向。我目前正在寻找一种好的方法。
【问题讨论】:
-
为什么在打印“命令失败”后捕获异常时不退出程序? - 您可以通过向您的代码添加信号处理来获得比这更复杂的情况,当孩子死亡时调用该代码,但在这种情况下,您似乎只想在失败时停止循环。 ...或者你是说在这种情况下你没有得到例外?
-
@Steve 我不知道为什么我还没有尝试过。大声笑那字面上还没有打到我。谢谢!如果我想尝试更复杂的信号处理,我会怎么做?子进程返回时我会检查它的状态吗?
标签: python subprocess system-calls kill