1

subprocess在两个进程之间使用交换数据

我编辑一个repeat.py文件:

此文件是来自http://www.doughellmann.com/PyMOTW/subprocess/的示例

import sys

sys.stderr.write('repeater.py: starting\n')
sys.stderr.flush()

while True:
    next_line = sys.stdin.readline()
    if not next_line:
        break
    sys.stdout.write(next_line)
    sys.stdout.flush()

sys.stderr.write('repeater.py: exiting\n')
sys.stderr.flush()

并在其中运行此文件ipython

In [1]: import subprocess

In [2]:      f=subprocess.Popen(['python','~/repeat.py'],shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE)

In [3]: f.stdin.write('teststs\n')

In [4]: f.communicate()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'teststs' is not defined
Out[4]: ('', None)

为什么teststs没有定义?

4

2 回答 2

3

您似乎正在启动交互式 Python 会话,而不是运行repeat.py. 尝试删除shell=True,它与参数列表一起没有意义。(shell=True顺便说一句,使用几乎总是一个坏主意。)

于 2012-07-19T14:54:03.057 回答
-1

这适用于前 5 次按键的一些奇怪行为。我不知道为什么。之后,如果工作正常,并且当按下 UP 时我们可以访问之前的命令ls -lcd似乎命令行具有完整的功能。

#!/bin/python3

import subprocess
import sys

proc = subprocess.Popen(['bash'])
while True:
    buff = sys.stdin.readline()
    stdoutdata, stderrdata = proc.communicate(buff)
    if( stdoutdata ):
        print( stdoutdata )
    else:
        print('n')
        break

是我的类似问题。

于 2016-08-25T12:17:21.097 回答