1

私はプログラムを作りました:

import collections
x = input("Enter in text: ")
x_counter = collections.Counter()
x_counter.update(x)
print("Your sequence contains:\n")
for i in '`1234567890-=qwertyuiop[]\asdfghjkl;zxcvbnm,./~!@#$%^&*()_+QWERTYUIOP\
{}|ASDFGHJKL:"ZXCVBNM<>?':
    print(i, x_counter[i])

これは、テキストで文字が使用された回数を出力します。ユーザーが段落などの小さいサイズのテキストを入力すると、プログラムは正常に実行されます。ユーザーが非常に長いテキスト、たとえば5段落を入力すると、プログラムは終了し、すべての入力をbashコマンドとして実行します...これはなぜですか?

4

1 に答える 1

5

これinputは、次の例のように、ユーザーから1行しか取得しないためです。

pax> cat qq.py
x = raw_input ("blah: ") # using raw_input for Python 2
print x

pax> python qq.py
blah: hello<ENTER>
hello

pax> there<ENTER>
bash: there: command not found

pax> 

1つの可能性は、を使用するのではなくファイルから情報を読み取ることinputですが、次のようなこともできます。

def getline():
    try:
        x = raw_input ("Enter text (or eof): ")
    except EOFError:
        return ""
    return x + "\n"

text = ""
line = getline()
while line != "":
    text = text + line;
    line = getline()
print "\n===\n" + text

これは、ユーザーがEOF(LinuxではCTRL-D)で入力を終了するまで、ユーザーからの入力を読み取り続けます。

pax> python qq.py
Enter text (or eof): Hello there,
Enter text (or eof): 
Enter text (or eof): my name is Pax.
Enter text (or eof): <CTRL-D>
===
Hello there,

my name is Pax.
于 2012-04-06T02:32:58.067 に答える