Я использую внешнюю команду внутри скрипта Python, используя сначала:
subprocess.Popen(cmd, stdout=subprocess.PIPE)
тогда я получаю стандартный вывод.
Проблема в том, что результат этой внешней команды при выполнении внутри скрипта не тот, если я выполняю ее прямо в командной строке.
Пользуюсь потом os.system(cmd)
, но та же проблема.
Используют ли эти инструкции в python некоторые буферы?
Как я могу объяснить разницу между двумя результатами (командной строкой и внутри скрипта).
Я использую этот инструмент как локальную команду из командной строки после его установки:
https://potassco.org/clingo/run/
Я использую некоторый файл в качестве входных данных, например этот:
edge("s1","s3").
edge("s2","s4").
edge("s3","s4").
path(X,Y) :- edge(X,Y). % x and y are strings
path(X,Z) :- path(X,Y), path(Y,Z).
:- path(X,Y), path(Y,X). %cyclic path.
Для этого инструмент создает такую модель:
edge("s1","s3") edge("s2","s4") edge("s3","s4") path("s1","s3") path("s2","s4") path("s3","s4") path("s1","s4")
SATISFIABLE
Когда я вызываю команду внутри своего скрипта Python, она не вычисляет всю модель, а создает неполную модель. Эта проблема появляется только в больших примерах, которые требуют вычисления большой модели. Вот почему я спрашиваю, используют ли эти команды: subprocess.Popen и os.system некоторые буферы...
subprocess.Popen
? Это может иметь значение. - person tkrennwa   schedule 27.09.2018bufsize
будет предоставлено в качестве соответствующего аргумента функцииopen()
при создании файловых объектов каналаstdin
/stdout
/stderr
. Буфер по умолчанию соответствует системным настройкам буферизации. Кроме того: предупреждение: используйтеcommunicate()
вместо.stdin.write
,.stdout.read
или.stderr.read
, чтобы избежать взаимоблокировок из-за заполнения любого другого буфера канала ОС и блокировки дочернего процесса. - person tkrennwa   schedule 06.10.2018