我正在尝试使用shell管道运算符“|”来管道2个python脚本,如下所示:
python s1.py | python s2.py
在最简单的情况下,s1.py和s2.py除了打印一些字符串外什么都不做:
在s1.py中:
print 'from s1.'
在s2.py中:
import sys
for line in sys.stdin.readlines():
print 'from s2: '+line
我想在执行s2.py后进入交互模式。我试图将-i
标志放在s1.py,s2.py和两者之前。但是没有一个能给出理想的结果。将import pdb;pdb.set_trace()
放在s2.py的末尾也无济于事。
有人能给出一些线索吗? 顺便说一句,我的python版本是2.5.2
答案 0 :(得分:1)
您需要重置stdin
来自终端,而不是管道。也就是说,在要求用户输入之前(假设你是在Unix-y环境中),调用sys.stdin = open("/dev/tty")
。例如:
import sys
for line in sys.stdin.readlines():
print 'from s2: ' + line
sys.stdin = open("/dev/tty")
raw_input()
答案 1 :(得分:1)
根据jme和讨论的建议给出更明确的答案:
作为最小的工作示例,在s1.py中:
print "from s1.py"
在s2.py中:
import sys
import readline # optional, will allow Up/Down/History in the console
import code
red_out=not sys.stdout.isatty() # check if re-directing out
red_in=not sys.stdin.isatty() # chech if re-directed in
#------Print out the re-directed in messages------
if red_in:
for line in sys.stdin.readlines():
print line.strip()
#--- Enter interactive session if not re-directing out---
if not red_out:
sys.stdin = open("/dev/tty")
shell=code.InteractiveConsole(vars)
shell.interact()
最后发布它,python s1.py | python s2.py