[CTRL + C在使用su运行时未在python脚本中处理

问题描述 投票:1回答:2

我有这样的Python代码。

try:
    while some_cond_is_still true:
        ....
except KeyboardInterrupt: # Handle CTRL+C
    ...

虽然我自己运行python脚本可以很好地处理KeyboardInterrupt,但是如果我像这样用su以另一个用户身份运行它,则无法处理它。

su <some_other_user> -c 'python myprogram.py <args>'

我该如何解决这个问题?

python linux keyboard-events
2个回答
0
投票

如果使用su <user> -c ...,则将在指定用户的conext中建立另一个shell。

我认为:如果您按CTRL+C,则取决于外壳,是否中断信号将到达python脚本。

尝试su <user> -c 'watch ls'查看,是否CTRL + C将停止观看ls。>>

[不确定,您打算如何处理脚本,但是如果您“仅”想要中止正在运行的脚本,则可以执行以下操作(或者替代CTRL + C:]]

通过按CRTL + Z停止此过程(用户外壳程序)。显示作业编号和停止的进程。现在,您可以使用作业号取消进程,例如kill %1

su

命令创建一个新的交互式shell,并在其中执行命令。当使用选项-c (--command)时,su命令将与命令中指示的用户创建新会话。要解决此问题,请使用选项--session-command。在这种情况下,命令将为:
su user_name --session-command 'python myprogram.py <args>'

在这种情况下,您应该能够捕获CTRL + C中断


0
投票

su

© www.soinside.com 2019 - 2024. All rights reserved.