无法回答是提示使用python子进程

时间:2019-06-13 20:10:55

标签: python bash terminal subprocess

我一直试图让在python中运行的子进程要求我回答y / N提示。

我的代码如下:

      process = subprocess.Popen(
        [   
            "yes",
            "|",
            "mycommand",
            "launch"
        ],
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE,
        shell=True
     )

当我尝试启动此Popen命令时,程序挂起。

当我在Mac终端中运行相同的命令时,它运行正常:

yes | mycommand launch

默认设置是什么?

1 个答案:

答案 0 :(得分:0)

您可以使用bash -csh -c

#! /usr/bin/env python
import subprocess

def run_cmd(cmd):
    result = subprocess.run([
      '/bin/bash',
      '-c',
      cmd
    ], stdout=subprocess.PIPE)
    returncode = result.returncode
    stdout = result.stdout
    return { 'returncode' : returncode, 'stdout': stdout}


r = run_cmd('yes | head')
print(r)

输出:

{'returncode': 0, 'stdout': b'y\ny\ny\ny\ny\ny\ny\ny\ny\ny\n'}

如果要将stdout打印为解码的字符串:

print(r['stdout'].decode('utf-8'))