Python popen команда. Ожидайте, пока команда не закончена

Вместо того чтобы использовать много циклов, вы можете попробовать просто объединить фрагменты:

def query(lst, t, start, end):
    # Convert to proper zero-indexed index
    start -= 1

    if t == '1':
        return lst[start:end] + lst[:start] + lst[end:]
    elif t == '2':
        return lst[:start] + lst[end:] + lst[start:end]


# Get the input however you want
N, M = map(int, input().split())
arr = list(map(int, input().split()))
assert len(arr) == N

for _ in range(M):
    t, start, end = input().split()
    arr = query(arr, t, int(start), int(end))

print(abs(arr[0] - arr[N - 1]))
print(*arr)

Вход:

8 4
1 2 3 4 5 6 7 8
1 2 4
2 3 5
1 4 7
2 1 4

Выход:

1
2 3 6 5 7 8 4 1
65
задан DennisLi 3 July 2019 в 07:50
поделиться

3 ответа

В зависимости от того, как вы хотите работать со своим скриптом, у вас есть два варианта. Если вы хотите, чтобы команды блокировались и ничего не делали во время выполнения, вы можете просто использовать subprocess.call .

#start and block until done
subprocess.call([data["om_points"], ">", diz['d']+"/points.xml"])

Если вы хотите что-то делать во время выполнения или загружать данные в stdin , вы можете использовать communication после вызова popen .

#start and process things, then wait
p = subprocess.Popen([data["om_points"], ">", diz['d']+"/points.xml"])
print "Happens while running"
p.communicate() #now wait plus that you can send commands to process

Как указано в документации, wait может заблокироваться, поэтому рекомендуется обмен данными.

97
ответ дан 24 November 2019 в 15:24
поделиться

Сила popen для не продолжения до всего вывода читается путем выполнения:

os.popen(command).read()
0
ответ дан 24 November 2019 в 15:24
поделиться

Вам нужен метод wait .

5
ответ дан 24 November 2019 в 15:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: