【问题标题】:python subprocess("cmd") spawning another interactive shellpython subprocess("cmd") 生成另一个交互式 shell
【发布时间】:2013-01-19 15:20:28
【问题描述】:
import os, subprocess
p = subprocess.Popen("cmd.exe", stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
print>>p.stdin, "echo hi"
p.stdout.readline()
p.stdout.readline()
p.stdout.readline()
p.stdout.readline()
p.stdout.readline()
p.stdout.readline()
print>>p.stdin, "python"
p.stdout.readline()

现在,如果我使用p.stdout.readline(),为什么我看不到 python shell?

另一方面,如果我从子进程中启动了另一个cmd 而不是python,我可以看到一个新的cmd shell 生成。

import os, subprocess
p = subprocess.Popen("cmd.exe", stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE)
print>>p.stdin, "echo hi"
p.stdout.readline()
p.stdout.readline()
p.stdout.readline()
p.stdout.readline()
p.stdout.readline()
p.stdout.readline()
print>>p.stdin, "cmd"
p.stdout.readline()
p.stdout.readline()
p.stdout.readline()

有什么区别?

【问题讨论】:

    标签: python windows subprocess


    【解决方案1】:

    当标准输出不是终端设备时,Python 的行为会有所不同:没有提示,没有横幅,它只是读取一个完整的脚本并执行它。

    我不知道它是如何移植到 Windows 的,但“控制台句柄”是他们拥有的“终端设备”的关闭对象。

    【讨论】:

    • 这对我没有帮助。我想要第一种情况下的第二种行为。
    • 使用python -i 会有所帮助
    • 不。使用python -i后,还是一样
    • @prongs 刚刚检查:python 将横幅和提示写入标准错误,而不是标准输出。 (所以你需要python -i 来打印这些东西,并使用p.stderr.readline() 来查看它们(或使用stderr=subprocess.STDOUT 来重定向两者))
    • -i 有什么不同?
    猜你喜欢
    • 2011-09-01
    • 2010-09-11
    • 2022-11-30
    • 2013-06-29
    • 2016-05-29
    • 2016-09-22
    • 2020-05-27
    • 2016-03-03
    • 2011-03-12
    相关资源
    最近更新 更多