【问题标题】:How do I pass a string in to subprocess.run using stdin in Python 3如何在 Python 3 中使用 stdin 将字符串传递给 subprocess.run
【发布时间】:2018-07-22 22:59:43
【问题描述】:

这肯定是作为关于其他地方子流程的长时间讨论的一部分来回答的。但是答案太简单了,应该破解。

如果我使用 Python 3 的 subprocess.run(),如何将字符串“foo”传递给在标准输入上期望它的程序?

【问题讨论】:

    标签: python-3.x subprocess


    【解决方案1】:

    text=Trueinput="whatever string you want" 传递给subprocess.run

    import subprocess
    subprocess.run("cat", text=True, input="foo\n")
    

    根据subprocess.run 的文档:

    input 参数被传递给Popen.communicate(),从而传递给子进程的标准输入。如果使用它必须是字节序列,或者如果指定了 encodingerrorstext 为真,则为字符串。使用时,内部Popen 对象会自动使用stdin=PIPE 创建,并且可能不使用stdin 参数。


    universal_newlines 在 Python 3.7 中被重命名为 text,所以在旧版本上你必须使用 universal_newlines=True 而不是 text=True

    subprocess.run("cat", universal_newlines=True, input="foo\n")
    

    如果您希望命令的输出为字符串,您可能需要添加capture_output=True

    subprocess.run("cat", universal_newlines=True, capture_output=True, input="foo\n")
    

    【讨论】:

    【解决方案2】:

    最简单的例子,将foo 发送到cat 并让它打印到屏幕上。

     import subprocess
    
     subprocess.run(['cat'],input=b'foo\n')
    

    注意你发送二进制数据和回车。

    【讨论】:

      猜你喜欢
      • 2010-09-14
      • 2023-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多