Ctrl C won';Python中的t kill循环子进程
是否有一种正确的方法来创建一个脚本,该脚本在文件夹中的文件中循环,并执行一个可以用Ctrl C从外部终止的子进程?我在管道中嵌入了如下内容,当主进程被终止时,无法从命令行控制它 示例脚本:Ctrl C won';Python中的t kill循环子进程,python,subprocess,system-calls,kill,Python,Subprocess,System Calls,Kill,是否有一种正确的方法来创建一个脚本,该脚本在文件夹中的文件中循环,并执行一个可以用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.
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杀死child(其他子进程)
非常感谢您的帮助,或为我指点方向。我目前正在寻找一个好的方法来做 try/except块中的内容过于随意,因此当按下Ctrl+C时,
KeyboardInterrupt
异常也由与print“Command Failed”
异常处理程序相同的异常处理程序来处理,由于该异常处理程序现在在那里得到了正确处理,因此程序流将继续通过for循环。你应该做的是:
Exception:
替换为Exception:
,这样键盘中断
异常将不会被捕获,这样每当按下Ctrl+C时,程序将终止(包括未处于某种不可终止状态的子进程)李>
print
语句之后,中断循环以防止进一步执行,如果这是您希望此程序执行的预期行为
我认为Ctrl+Z还可以帮助您将执行推到后台并挂起。您可以捕获
键盘中断,这样您就可以以任何方式处理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 KeyboardInterrupt as e:
print "Interrupted"
sys.exit(1)
except:
print "Command Failed"
但是,我同意其他海报中的观点,即您的异常过于模糊,您应该更具体地说明什么可以失败,什么不可以失败。为什么不在打印“命令失败”后,在捕获异常时退出您的程序通过在代码中添加信号处理,您可以得到比这更复杂的结果,当一个孩子死亡时,您会被调用,但在这种情况下,您似乎只想在出现故障时停止循环。。。或者你是说在这种情况下你没有例外?@Steve我不知道为什么我还没有试过。哈哈,我还真没想到。谢谢如果我想尝试更复杂的信号处理,我会怎么做?我能在子流程返回时检查其状态吗?谢谢您的回复。我也会试试这个。:)我一定会回复更新。