python - 用 pexpect 杀死一个 sudo/root 进程

标签 python python-2.7 pexpect

给定一个使用 sudo 打开的预期衍生进程,如下所示:

#!/usr/bin/env python
import pexpect

cmd = ['sudo', 'bash', '-c', '"some long-running sudo command"']
cmd = ' '.join(cmd)
child = pexpect.spawn(cmd, timeout=60)

i = child.expect([
  'success',
  'error'])
if i == 0:
  print('ok')
else:
  print('fail')
  # insert code here

我如何在失败(或成功,就此而言)时终止此进程?

我尝试了以下方法(替换 # insert code here):

child.kill(0)
child.close(force=True)

两者都给出以下错误,这是有道理的,因为 Python 脚本不是根进程,并且它正试图杀死根进程。 p>

Traceback (most recent call last):
  File "./myscript.py", line 85, in <module>
    requires_qemu()
  File "./myscript.py", line 82, in requires_qemu
    child.close(0)
  File "/usr/lib/python2.7/site-packages/pexpect/__init__.py", line 747, in close
    raise ExceptionPexpect('Could not terminate the child.')
pexpect.ExceptionPexpect: Could not terminate the child.

由于文件权限的原因,无法以 root 身份运行脚本(从阻止 root 访问的共享 NFS 驱动器运行)

最佳答案

使用 sudo 以 root 身份杀死它:

subprocess.call(['sudo', 'kill', str(child.pid)])

关于python - 用 pexpect 杀死一个 sudo/root 进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23445208/

相关文章:

python - 变换预测目标

python - 我想打印与列表中指定的相同的整数值

python - 将正则表达式模式作为系统参数传递给 Python 脚本

Python:如何生成给定长度的三个字符的每种可能排列的列表?

python - 从 pexpect 运行 Scilab

python - tensorflow:保存和恢复 session

python - 如何计算 pandas 中每一行的百分位数分数?

python - Conda 中的环境路径错误

python - 期望发送光标移动

python-3.x - `pipenv install` 在 RPi 上超时