我试图使用subprocess在python中以交互方式运行python。当我运行以下脚本时,它会挂起我对stderr的读取。
import subprocess
p = subprocess.Popen('python', shell=True, stdout=subprocess.PIPE,
stderr=subprocess.PIPE, stdin=subprocess.PIPE,
bufsize=1, universal_newlines=True)
text = p.stderr.read(256)
p.stdin.write('exit()\n')
p.close()
但是,如果我做了一个微小的更改,从构造函数中删除stdin=subproces.PIPE
,它就会成功运行,text
会从p.stderr
分配输出,然后在p.stdin.write上失败( ..)'NoneType' object has no attribute 'write'
为什么会这样?我试图保持一个子进程打开以从中读取并随意写入它。
我想做这个单线程。我的主要'脚本打开python然后循环运行,从用户获取输入。如果用户输入' r'如果他们进入“w'它写入了这个过程。
我搜索的越多,我测试的解决方案越多,似乎不可能同时输入输入和输入。使用python子进程的输出流。如果我没有传入stdin = PIPE,我可以正常运行程序并读取stderr。我也尝试为每个文件指针使用不同的命名文件,但没有成功。
还在打这场战斗。就像一张纸条,如果其他人都熟悉红宝石世界,那么我想要做的就是使用" ChildProcess"宝石。用python
是一种方法答案 0 :(得分:0)
正如“Sven Marnach”所说,
如果连接了stdin,Python不会打印版权声明 到管道
由于没有可供读取的内容而被阻止的子进程被阻止。通过轮询输出来解决这个问题。