Подтвердить что ты не робот

Есть ли способ не дождаться завершения команды system()? (с)

Похожий на:
программа не выполняет ничего после вызова system()

Я довольно плохо знаком с использованием C, но в основном я хочу выполнить следующую строку:

int a = system("python -m plotter");

который запустит модуль Python, который я разработал. Однако я хочу, чтобы остальная часть моей программы на c продолжала работать, а не дожидалась завершения выполнения команды (приложение python находится в бесконечном цикле, поэтому оно не закрывается автоматически). Есть ли способ сделать это с помощью C/C++?

Обновление: решение было:

int a = system("start python -m plotter &");
4b9b3361

Ответ 1

system() просто передает свой аргумент оболочке (в Unix-подобных системах, обычно /bin/sh).

Попробуйте следующее:

int a = system("python -m plotter &");

Конечно, значение, возвращаемое system(), не будет состоянием выхода python script, так как оно еще не закончено.

Это, скорее всего, будет работать только на Unix-подобных системах (возможно, включая MacOS); в частности, он, вероятно, не будет работать в MS Windows, если вы не работаете под Cygwin.

В Windows system() возможно вызывает cmd.exe, который не принимает команды с тем же синтаксисом, который используется в Unix-подобных системах. Но команда Windows start должна выполнить задание:

int a = system("start python -m plotter");

Пока вы пишете код, специфичный для Windows (start не будет работать в Unix, если у вас не будет команды start в $PATH), вы можете подумать об использовании некоторых более низкоуровневых Windows, возможно, позвонив StartProcess. Это сложнее, но, скорее всего, даст вам больше контроля над тем, как выполняется процесс. С другой стороны, если system() соответствует вашим требованиям, вы можете также использовать его.

Ответ 2

В стандартной библиотеке нет способа, но вы можете разблокировать или создать отдельный поток, который будет запускать его на фоне, если ваша ОС поддерживает его.

Ответ 3

Я считаю, что если вы добавите '&' до конца команды он будет работать. '& Амп;' говорит команде запускать в фоновом режиме

int a = system("python -m plotter &");

Ответ 4

Команда

"System" в Linux позволит остальной части кода выполнять только тогда, когда она выполнила сам.

Вы должны использовать fork(), если хотите одновременную обработку.

Ответ 5

Слово для этого - вызов асинхронной функции/метода. C и С++ не имеют такой функции, поэтому вам нужно либо вызвать функцию в отдельном потоке, либо использовать системный вызов, который будет запускаться в отдельном процессе. Оба эти метода имеют тенденцию быть специфичными для платформы, хотя существуют библиотеки потоковой обработки с поперечной платформой.

Я знаю, что в unix для этого в отдельном процессе вы бы использовали fork (2) для создания нового процесса и exec (3), чтобы выполнить новую программу в этом процессе. Я не знаю, какие системные вызовы потребуются в Windows, но должно быть что-то подобное.