Rya*_*ing 5 python subprocess pipe python-3.x python-3.3
我有两个小python文件,第一个使用读取一行input,然后打印另一行
a = input()
print('complete')
Run Code Online (Sandbox Code Playgroud)
第二次尝试将其作为子进程运行
import subprocess
proc = subprocess.Popen('./simp.py',
stdout=subprocess.PIPE,
stdin=subprocess.PIPE,
bufsize=1)
print('writing')
proc.stdin.write(b'hey\n')
print('reading')
proc.stdout.readline()
Run Code Online (Sandbox Code Playgroud)
上面的脚本将先打印“正在书写”,然后显示“正在阅读”,然后挂起。起初我以为这是一个标准输出缓冲的问题,所以我换bufsize=1到bufsize=0了,这确实解决问题。但是,似乎是标准输入引起了问题。
使用bufsize=1,如果我proc.stdin.flush()在写入下方添加,则过程继续。这两种方法都显得笨拙,因为(1)无缓冲的流很慢(2)在所有地方添加刷新都很容易出错。为什么上面的代码write不能在换行符上刷新?文档说这bufsize是在为子进程创建stdin,stdout和stderr流时使用的,那么是什么导致写操作不在换行符上刷新呢?
从文档中:“ 1表示行缓冲(仅当Universal_newlines = True,即在文本模式下可用)”。这有效:
import subprocess
proc = subprocess.Popen('./simp.py',
stdout=subprocess.PIPE,
stdin=subprocess.PIPE,
bufsize=1,
universal_newlines=True)
print('writing')
proc.stdin.write('hey\n')
print('reading')
proc.stdout.readline()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4585 次 |
| 最近记录: |