0

入力を変更して for ループで実行したいプログラムがあります。

import subprocess
for num in range(StartingPoint, EndingPoint):
 p = subprocess.Popen("C:\\Programming\\simple\\Simple_C\\bin\\Simple_C.exe",
                   shell=True,
                   stdin=subprocess.PIPE,
                   stdout=subprocess.PIPE)
 p.communicate(input='%d\n' % num)
output = p.communicate()[0]
print (output)

しかし、私はこのエラーが発生します:

TypeError: 'str' はバッファ インターフェイスをサポートしていません

プログラムは数字を要求し、Python はそれに「num」を与える必要があります。これに対するより良い解決策はありますか? 私は Python バージョンを使用してい3.3.2ます。

4

2 に答える 2

1

代わりにバイトを使用してください

import subprocess
for num in range(StartingPoint, EndingPoint):
    p = subprocess.Popen("C:\\Programming\\simple\\Simple_C\\bin\\Simple_C.exe",
                shell=True,
                stdin=subprocess.PIPE,
                stdout=subprocess.PIPE)
    p.communicate(input=('%d\n'%num).encode())
    output = p.communicate()[0]
    print (output)
于 2013-06-14T07:54:07.407 に答える
0

Pythonのドキュメントによると、bytes文字列の代わりに渡す必要があります:

入力のタイプはバイトであるか、universal_newlines が True の場合は文字列でなければなりません。

警告: 非 asccii テキストをエンコードする場合は、バイトに変換するときに正しいエンコードを使用していることを確認してください。

于 2013-06-14T08:09:48.643 に答える