if( isset($_POST['fromPerson']) )
{
$fromPerson = '+from%3A'.$_POST['fromPerson'];
echo $fromPerson;
}
Попробуйте модуль asyncproc . Например:
import os
from asyncproc import Process
myProc = Process("myprogram.app")
while True:
# check to see if process has ended
poll = myProc.wait(os.WNOHANG)
if poll != None:
break
# print any new output
out = myProc.read()
if out != "":
print out
модуль заботится обо всей поточной обработке, как предложено S.Lott.
Одно решение состоит в том, чтобы сделать другой процесс, чтобы выполнить Ваше чтение процесса или сделать поток из процесса с тайм-аутом.
Вот потоковая версия функции тайм-аута:
http://code.activestate.com/recipes/473878/
Однако необходимо ли считать stdout, поскольку он входит? Другое решение может состоять в том, чтобы вывести вывод в файл и ожидать процесса, чтобы закончить использовать p.wait () .
f = open('myprogram_output.txt','w')
p = subprocess.Popen('myprogram.exe', stdout=f)
p.wait()
f.close()
str = open('myprogram_output.txt','r').read()
return x = [x]
; xs >>= f = concatMap f xs
. (Предупреждение: дополнительный, возможно запутывающие размышления следуют), concatMap, отображает функцию a -> [b]
на список a
, и затем " flattens" результирующий список от [[b]]
до [b]
. concatMap f xs = concat (map f xs)
. Это (не по совпадению) подобно пути bind
, может быть определен с точки зрения fmap
и join
для [1 113] любой монада: x >>= f = join (fmap f x)
; Вы видите что join = concat
и fmap = map
для списков.
– Dan Burton
3 November 2011 в 10:05
выбор модуль помогает Вам определить, где следующий полезный вход.
Однако Вы почти всегда более довольны отдельными потоками. Каждый делает блокирование, читает stdin, другой делает везде, где это - Вы, не хотят заблокированный.
У меня часто возникала похожая проблема; Программы Python, которые я пишу часто, должны иметь возможность выполнять некоторые основные функции, одновременно принимая ввод пользователя из командной строки (stdin). Простое размещение функции обработки пользовательского ввода в другом потоке не решает проблему, потому что readline ()
блокируется и не имеет тайм-аута. Если основная функция завершена и больше нет необходимости ждать дальнейшего ввода данных пользователем, я обычно хочу, чтобы моя программа завершилась, но это невозможно, потому что readline ()
все еще блокируется в другом ожидающем потоке для строки. Решение, которое я нашел для этой проблемы, - сделать stdin неблокирующим файлом с помощью модуля fcntl: