Вот часть моего класса, которой, я считаю, достаточно
Код: Выделить всё
def run(
self, args: List[str] = [], stdin: str = "", timeout: int = 30
) -> Tuple[int, str, str]:
process = subprocess.Popen(
[os.path.join(self.temp_file_folder, "build", self.target_file_name)]
+ args,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
text=True,
)
try:
stdout, stderr = process.communicate(input=stdin, timeout=timeout)
except subprocess.TimeoutExpired as e:
process.kill()
raise RunTimeoutError(f"Expired in {timeout}s")
return (process.returncode, stdout, stderr)
Я вызываю свою функцию без какого-либо стандартного ввода.
когда таймаут == 30 выводит следующее:
Код: Выделить всё
Killed
Код: Выделить всё
Traceback (most recent call last):
File "/home/jayzhu/projects/code-auto-comment/src/runner/__init__.py", line 161, in
res = runner.run(timeout=5)
File "/home/jayzhu/projects/code-auto-comment/src/runner/__init__.py", line 124, in run
raise RunTimeoutError(f"Expired in {timeout}s")
__main__.RunTimeoutError: Expired in 5s
Код: Выделить всё
#include
#include
#include
#include
int main()
{
int N;
double sum = 0;
double product = 1;
std::cout > N;
while (std::cin.fail() || N < 1 || N > 50)
{
std::cin.clear();
std::cin.ignore(std::numeric_limits::max(), '\\n');
std::cout > N;
}
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/78796128/why-does-process-communicate-cause-my-program-to-be-killed[/url]