Записать результат функции в стандартный ввод

Я пытаюсь записать результаты функции в стандартный ввод.

Это код:

def testy():
    return 'Testy !'

import sys
sys.stdin.write(testy())

И ошибка, которую я получаю:

Traceback (most recent call last):
  File "stdin_test2.py", line 7, in 
    sys.stdin.write(testy())
io.UnsupportedOperation: not writable

я не совсем уверен, это правильный способ делать вещи?

 dawg24 февр. 2013 г., 20:29
Какую ОС вы используете?
 Sandeep Raju Prabhakar24 февр. 2013 г., 20:19
В следе говорится, что этоне доступно для записи ... вы читали это?
 m_vdbeek24 февр. 2013 г., 20:27
Там, где я ранее просил пользователя написать 1, 2 или 3 для выбора опций, я знаю, что в GUI есть три места, где пользователь может щелкнуть. Event.x и event.y затем преобразуются в специальную строку и передаются в input ().
 m_vdbeek24 февр. 2013 г., 20:24
Потому что у меня есть программа, которая изначально была в оболочке, а теперь онас помощью графического интерфейса. То, что я хочу сделать, это преобразовать события щелчка в строку (готово) и передать результат в ранее используемый метод input ().
 Pavel Anossov24 февр. 2013 г., 20:17
Что это за вещи?пытаешься сделать?stdin для чтения ввода, это 'Открыт только для чтения.
 m_vdbeek24 февр. 2013 г., 20:19
Да, я знаю. Я хочу симулировать нажатия клавиш в методе input (), написав в stdin.
 Pavel Anossov24 февр. 2013 г., 20:28
Возможно, вам следует вызвать старую программу для новой, отдельной программы и просто ввести в нее канал.
 askewchan24 февр. 2013 г., 20:22
@ Пробудитесь. Было бы полезно иметь некоторый контекст: почему вы хотите имитировать нажатия клавиш?input()
 m_vdbeek24 февр. 2013 г., 20:20
@sandeepraju Да, но этоне очень полезно пытаться достичь того, что я написал в своем комментарии чуть выше.
 m_vdbeek24 февр. 2013 г., 20:33
@PavelAnossov слишком много вызовов функций. Дрюк: Linux

Ответы на вопрос(3)

Решение Вопроса

Вы могли бы издеватьсяstdin с файловым объектом?

import sys
import StringIO

oldstdin = sys.stdin
sys.stdin = StringIO.StringIO('asdlkj')

print raw_input('.')       #  .asdlkj
 m_vdbeek24 февр. 2013 г., 20:35
Я думаю я'Я собираюсь попробовать это решение. Спасибо !

Я гуглил, как сделать это сам и понял это. Для моей ситуации я взял пример ввода с hackerrank.com и поместил его в файл, а затем хотел использовать этот файл в качестве моего STDIN, чтобы я мог написать решение, которое можно было бы легко скопировать / вставить в их IDE , Я сделал свои 2 файла Python исполняемыми, добавил Шебанг. Первый читает мой файл и пишет в STDOUT.

#!/Users/ryandines/.local/share/virtualenvs/PythonPractice-U9gvG0nO/bin/python
# my_input.py
import sys

def read_input():
    lines = [line.rstrip('\n') for line in open('/Users/ryandines/Projects/PythonPractice/swfdump')]
    for my_line in lines:
        sys.stdout.write(my_line)
        sys.stdout.write("\n")

read_input()

Второй файл - это код I 'Я пишу, чтобы решить задачу программирования. Это было мое

#!/Users/ryandines/.local/share/virtualenvs/PythonPractice-U9gvG0nO/bin/python
def zip_stuff():

    n, x = map(int, input().split(' '))
    sheet = []

    for _ in range(x):
        sheet.append( map(float, input().split(' ')) )

    for i in zip(*sheet): 
        print( sum(i)/len(i) )

zip_stuff()

Тогда я использую операционную системуs pipe команда для обеспечения буферизации STDIN. Работает точно так же, как hackerrank.com, поэтому я могу легко вырезать / вставить образец ввода, а также соответствующий код, ничего не меняя. Назовите это так:./my_input.py | ./zip_stuff.py

stdin является входным потоком, а не выходным потоком. Вы можете'не писать в него.

Возможно, вы сможете создать канал, используяos.pipe, превратить читаемый конец в объект файла, используяos.fdopenи замените stdin этим, а затем запишите в конец записи.

r, w = os.pipe()
new_stdin = os.fdopen(r, 'r')
old_stdin, sys.stdin = sys.stdin, new_stdin

Я могу'Однако, я не вижу, чтобы это хорошо закончилось. Будет проще и менее подвержено ошибкам просто переписать части вашего приложения, которые используют.input

 The Matt23 дек. 2018 г., 07:15

Ваш ответ на вопрос