sudo,ctrl + c和管道的子进程问题

时间:2013-11-28 17:43:21

标签: linux python-2.7 subprocess pipe sudo

我需要使用python脚本中的C_program运行外部subprocess

以下是棘手的部分:

  1. 外部程序需要以超级用户权限运行,因此我需要让用户输入密码以确保允许他运行程序。
  2. 外部程序可能会运行很长时间(有时是几天),用户可能需要使用CTRL+C
  3. 手动终止它
  4. C_program的输出应打印到屏幕上,因此stdout应通过管道传送到subprocess
  5. 这是我尝试过的:

    try:
        proc = subprocess.Popen(c_program, shell=True, stdin=subprocess.PIPE, stderr=subprocess.STDOUT)
        #needs sudo password to run this program
        proc.communicate(getpass.getpass())
    except KeyboardInterrupt:
        print "you stopped c_program, script will now go on..."
    #do other things
    

    不幸的是,这将导致两个我似乎无法解决的问题:

    1. 正在执行CTRL+C时按c_program将绝对不做任何事情(不仅不会停止c_program甚至python脚本本身的执行,它也会被忽略。 ..)
    2. 如果脚本确实完成了运行,终端就会开始运行......它不会显示用户正在键入的内容但它确实会响应它(例如,键入ls -l将不会显示在屏幕,但是,按Enter键后,命令的输出将打印到屏幕上)
    3. 我在Ubuntu上使用Python 2.7

      请帮助:)

0 个答案:

没有答案