1

subprocess2つのプロセス間でデータ交換を使用します

私は次のようにファイルを編集し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 -l場合はcd、コマンドラインにすべての機能があるようです。

#!/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 に答える