#python #bash #windows-subsystem-for-linux
#python #bash #windows-subsystem-for-linux
Вопрос:
Я пишу шаблон для стресс-тестирования своих программ. Где находится файл gen.py
(он должен был быть создателем теста):
print(1)
Если я пишу в терминале Linux python3 gen.py > test.txt
— python печатает 1
в файл.
Где также находится файл stress.py
(этот файл изначально должен запускать основную программу много раз).
import os
os.popen('python3 gen.py > test.txt')
print(*os.popen('cat test.txt').readlines())
Ожидается, что результат будет «1», но ни в выходных данных, ни в файле test.txt
ничего нет . Я запускаю Linux Ubuntu, используя WSL в Windows. Возможно, это на что-то влияет.
Комментарии:
1.
os.popen()
просто запускает процесс. Вы не дождались завершения первого, прежде чем второй попытался прочитать его вывод.2. Да, теперь это сработало. Как я могу дождаться завершения предыдущего popen?
3.
os.popen()
на самом деле не подходит, когда вы не вводите ввод или не ожидаете вывода от команды.os.system()
здесь было бы лучше работать с первой командой (она не возвращается, пока команда не будет выполнена), но лучшие варианты находятся вsubprocess
модуле — вы можете избежать запуска бесполезной (и небезопасной) оболочки и можете предоставлять параметры, не беспокоясь о том, содержат ли они какие-либо символы, которые нужно было бы заключить в кавычки.
Ответ №1:
Самый быстрый способ сделать это — вы должны написать os.popen(...).read()
. Таким образом .read()
, будет ждать, пока функция не завершится.