在Python代码中,我经常向shell发送命令并使用
import subprocess as S
x = subprocess.Popen('<command>', shell=True, stdout=S.PIPE)
x.stdout.read()
,其中<command>
是有问题的shell命令。但是,我发现,当在子进程中发出此指令时,例如,对于命令stty size
,shell的响应是
我的指令返回一个空字符串。在http://docs.python.org/library/subprocess#popen-objects上的Python文档之后,我还尝试将stdout.read()
替换为communicate()
:
x = subprocess.Popen('<command>', shell=True, stdin=S.PIP, stdout=S.PIPE)
x.stdout.read()
但是外壳的反应还是一样的。在
我的问题是:如何让Python将标准输入作为终端处理?在
这并不是说Python没有将stdin当作一个终端来对待;如果stdin是一个终端,Python很可能会将其视为终端。但子进程的stdin可能不是。在第二种情况下,它肯定不是终端,因为您显式地使用管道。在
如果不改变管道的工作方式,你可能无法让stty把管道当作终端。但无论如何,这可能不是你想做的。在
但是,如果Python自己的stdin是tty,那么第一个示例应该可以工作,因为stty应该从shell继承它。在
也许我不清楚你所说的“在子进程中发出此指令时”是什么意思。从技术上讲,除了init/launchd之外,Un*x系统上的所有内容都是子进程。在
相关问题 更多 >
编程相关推荐