【问题标题】:Is it possible to communicate with a sub subprocess with subprocess.Popen?是否可以使用 subprocess.Popen 与子子进程通信?
【发布时间】:2010-09-20 00:36:18
【问题描述】:

我正在尝试编写一个 python 脚本来打包我们的软件。该脚本需要构建我们的产品,并将其打包。目前,我们还有其他脚本可以单独完成每个部分,包括 csh 和 perl 脚本。一个这样的脚本运行如下:

sudo mod args

其中 mod 是 perl 脚本;所以在python中我会做

proc = Popen(['sudo', 'mod', '-p', '-c', 'noresource', '-u', 'dtt', '-Q'], stderr=PIPE, stdout=PIPE, stdin=PIPE)

问题是这个模组脚本需要回答几个问题。为此,我认为传统的

(stdout, stderr) = proc.communicate(input='y')

会起作用的。我认为它不起作用,因为 Popen 控制的过程是 sudo,而不是提出问题的 mod 脚本。有什么方法可以与 mod 脚本通信并仍然通过 sudo 运行它?

【问题讨论】:

    标签: python subprocess


    【解决方案1】:

    我会选择 Pexpect。

    import pexpect
    child = pexpect.spawn ('sudo mod -p -c noresource -u dtt -Q')
    child.expect ('First question:')
    child.sendline ('Y')
    child.expect ('Second question:')
    child.sendline ('Yup')
    

    【讨论】:

      【解决方案2】:

      我们需要更多信息。

      1. sudo 是否要求您输入密码?
      2. mod脚本有什么样的提问界面?

      因为这类事情不是通过管道正常处理的。

      这两个问题的解决方案可能是Pexpect,它非常擅长处理要求密码的有趣脚本以及各种其他输入问题。

      【讨论】:

        【解决方案3】:

        我认为您应该在您的Popen 调用中删除sudo,并要求您的 脚本的用户键入sudo

        这还更明确地说明了对脚本中提升权限的需求,而不是将其隐藏在 Popen 中。

        【讨论】:

          【解决方案4】:

          最简单的做法是通过sudo 运行控制脚本(Python 脚本)。你能做到吗,还是不能这样做?

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-10-05
            • 2016-08-06
            • 2012-07-07
            • 1970-01-01
            • 1970-01-01
            • 2017-09-29
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多