在Python中以交互方式运行Python

时间:2016-09-28 22:08:25

标签: python-2.7 subprocess

我试图使用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

是一种方法

1 个答案:

答案 0 :(得分:0)

正如“Sven Marnach”所说,

  

如果连接了stdin,Python不会打印版权声明   到管道

由于没有可供读取的内容而被阻止的子进程被阻止。通过轮询输出来解决这个问题。