Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python—如何从shell读取stdin,并将stdout发送到shell和文件_Python_Bash - Fatal编程技术网

Python—如何从shell读取stdin,并将stdout发送到shell和文件

Python—如何从shell读取stdin,并将stdout发送到shell和文件,python,bash,Python,Bash,我希望有一个Python脚本从shell(bash)读取stdin,并将stdout以及重定向文件发送到shell。我尝试了以下方法: $ cat test.py #!/usr/bin/python val = raw_input("enter val: ") print val $ ./test.py | tee out testing enter val: testing $ cat out enter val: testing 出于某种原因,原始输入提示是在我键入输入后打印的,这意

我希望有一个Python脚本从shell(bash)读取stdin,并将stdout以及重定向文件发送到shell。我尝试了以下方法:

$ cat test.py
#!/usr/bin/python

val = raw_input("enter val: ")
print val

$ ./test.py | tee out
testing
enter val: testing

$ cat out
enter val: testing
出于某种原因,原始输入提示是在我键入输入后打印的,这意味着我在键入时看不到提示。使用bash脚本,我可以获得类似的工作

$ cat test.sh
#!/bin/bash

echo "enter val: "
read val
echo $val

$ ./test.sh | tee out
enter val: testing
testing

$ cat out
enter val: testing

看到这个bug,看起来raw_输入将其提示符写入stderr


我认为这不是问题所在。我尝试了与OP相同的方法,但使用了
打印
输出提示,结果是一样的。它确实如此,只是没有潮红,你会看到相同的症状-请参阅tMCs答案
#!/usr/bin/python
import sys

print "enter val: ",
sys.stdout.flush()
val = raw_input()
print val
#!/usr/bin/python
import sys

sys.stdout = sys.stderr
val = raw_input("enter val: ")
sys.stdout = sys.__stdout__
print val