Причина состоит в том, что все методы, определенные в интерфейсе, абстрактны, объявляете ли Вы явно тот модификатор. Абстрактный статический метод не является допустимой комбинацией модификаторов, так как статические методы не в состоянии быть переопределенными.
относительно того, почему интерфейсы позволяют статические поля. У меня есть чувство, которое нужно считать "функцией". Единственная возможность, о которой я могу думать, состояла бы в том, чтобы сгруппировать константы, которыми будут интересоваться реализации интерфейса.
я соглашаюсь, что непротиворечивость была бы лучшим подходом. Никаким статическим участникам нельзя разрешить в интерфейсе.
Если вы используете 'for l in sys.stdin', он буферизуется.
Вы можете использовать:
while 1:
l = sys.stdin.readline()
Control-D should NOT make your program "just stop" -- it should close standard input, and if your program deals with that properly, it may perfectly well continue if it needs to!
For example, given the following st.py
:
import sys
def main():
inwas = []
for line in sys.stdin:
inwas.append(line)
print "%d lines" % len(inwas),
print "initials:", ''.join(x[0] for x in inwas)
if __name__ == '__main__':
main()
we could see something like
$ python st.py
nel mezzo del cammin di nostra vita
mi ritrovai per una selva oscura
che la diritta via era smarrita
3 lines initials: nmc
$
if the control-D is hit right after the enter on the third line -- the program realizes that standard input is done, and performs the needed post-processing, all neat and proper.
If your program prematurely exits on control-D, it must be badly coded -- what about editing you question to add the smallest "misbehaving" program you can conceive of, so we can show you exactly HOW you're going wrong?
Думаю, я знаю, что происходит. Вы нажимаете ctrl-D
, не нажимая , введите
. Если вы хотите отправить в программу строку, просто нажмите Enter. Если вы нажмете ctrl-D
, не нажав , введите
, вы можете снова нажать ctrl-D
, и тогда ваша программа должна увидеть строку. В этом случае (два ctrl-D
подряд) ваша программа не увидит новую строку в конце строки.
Например, скажем, у меня есть сценарий Python a .py
:
import sys
for line in sys.stdin:
sys.stdout.write('%s' % line)
И я выполняю его:
$ python a.py
А затем введите следующее:
line 1
line 2<ctrl-D><ctrl-D>
программа напечатает:
line 1
line 2$
$
- это приглашение оболочки. Вот полный сеанс с указанными выше данными:
$ python a.py
Вы нажимаете ctrl-D
, не нажимая , введите
. Если вы хотите отправить в программу строку, просто нажмите Enter. Если вы нажмете ctrl-D
, не нажав , введите
, вы можете снова нажать ctrl-D
, и тогда ваша программа должна увидеть строку. В этом случае (два ctrl-D
подряд) ваша программа не увидит новую строку в конце строки.
Например, скажем, у меня есть сценарий Python a .py
:
import sys
for line in sys.stdin:
sys.stdout.write('%s' % line)
И я выполняю его:
$ python a.py
А затем введите следующее:
line 1
line 2<ctrl-D><ctrl-D>
программа напечатает:
line 1
line 2$
$
- это приглашение оболочки. Вот полный сеанс с указанным выше вводом:
$ python a.py
Вы нажимаете ctrl-D
, не нажимая , введите
. Если вы хотите отправить в программу строку, просто нажмите Enter. Если вы нажмете ctrl-D
, не нажав , введите
, вы можете снова нажать ctrl-D
, и тогда ваша программа должна увидеть строку. В этом случае (два ctrl-D
подряд) ваша программа не увидит новую строку в конце строки.
Например, скажем, у меня есть сценарий Python a .py
:
import sys
for line in sys.stdin:
sys.stdout.write('%s' % line)
И я выполняю его:
$ python a.py
А затем введите следующее:
line 1
line 2<ctrl-D><ctrl-D>
программа напечатает:
line 1
line 2$
$
- это приглашение оболочки. Вот полный сеанс с указанными выше данными:
$ python a.py
Если вы нажмете ctrl-D
, не нажав , введите
, вы можете снова нажать ctrl-D
, и тогда ваша программа должна увидеть строку. В этом случае (два ctrl-D
подряд) ваша программа не увидит новую строку в конце строки.
Например, скажем, у меня есть сценарий Python a .py
:
import sys
for line in sys.stdin:
sys.stdout.write('%s' % line)
И я выполняю его:
$ python a.py
А затем введите следующее:
line 1
line 2<ctrl-D><ctrl-D>
программа напечатает:
line 1
line 2$
$
- это приглашение оболочки. Вот полный сеанс с указанными выше данными:
$ python a.py
Если вы нажмете ctrl-D
, не нажав , введите
, вы можете снова нажать ctrl-D
, и тогда ваша программа должна увидеть строку. В этом случае (два ctrl-D
подряд) ваша программа не увидит новую строку в конце строки.
Например, скажем, у меня есть сценарий Python a .py
:
import sys
for line in sys.stdin:
sys.stdout.write('%s' % line)
И я выполняю его:
$ python a.py
А затем введите следующее:
line 1
line 2<ctrl-D><ctrl-D>
программа напечатает:
line 1
line 2$
$
- это приглашение оболочки. Вот полный сеанс с указанными выше данными:
$ python a.py
s скажем, у меня есть сценарий Python a.py
:
import sys
for line in sys.stdin:
sys.stdout.write('%s' % line)
И я выполняю его:
$ python a.py
А затем введите следующее:
line 1
line 2<ctrl-D><ctrl-D>
программа напечатает:
line 1
line 2$
$
is приглашение оболочки. Вот полный сеанс с указанными выше данными:
$ python a.py
s скажем, у меня есть сценарий Python a.py
:
import sys
for line in sys.stdin:
sys.stdout.write('%s' % line)
И я выполняю его:
$ python a.py
А затем введите следующее:
line 1
line 2<ctrl-D><ctrl-D>
программа напечатает:
line 1
line 2$
$
is приглашение оболочки. Вот полный сеанс с указанными выше данными:
$ python a.py
строка 1
строка 2 строка1
строка 2 $
( Полужирным шрифтом показан вывод программы. Римский регистр для отображения того, что я набрал, без двух ctrl-D
s)
Если это не то, что происходит, вам нужно рассказать нам больше о том, что вы делаете.