【问题标题】:How do I pass a string into subprocess.run using stdin?如何使用标准输入将字符串传递到 subprocess.run?
【发布时间】:2023-02-09 20:23:51
【问题描述】:

这肯定是作为 a 的一部分回答的长的其他地方关于子流程的讨论。但答案是如此简单,应该打破。

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

【问题讨论】:

    标签: python python-3.x subprocess


    【解决方案1】:

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

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

    根据 subprocess.run 的文档:

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

    要同时以字符串形式获取命令的输出,请添加 capture_output=True

    subprocess.run("cat", input="foo
    ", capture_output=True, text=True)
    

    【讨论】:

      【解决方案2】:

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

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

      请注意,您发送的是二进制数据和回车符。

      【讨论】:

        猜你喜欢
        • 2020-11-10
        • 2017-03-19
        • 2018-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-14
        • 1970-01-01
        • 2019-05-07
        相关资源
        最近更新 更多