Java может делать почти все, что может curl
. Просто скачайте файл с кодом:
URL remotePythonFile = new URL("http://example.com/remotefile.py");
Path localPythonFile = Files.createTempfile(null, ".py");
try (InputStream remoteStream = remotePythonFile.openStream()) {
Files.copy(remoteStream, localPythonFile,
StandardCopyOption.REPLACE_EXISTING);
}
ProcessBuilder builder =
new ProcessBuilder("python", localPythonFile.toString());
Хорошо - это работает на меня в Windows и портативно - замечают #ifdef SIGBREAK - это не стандартный сигнал.
#include <csignal>
#include <iostream>
#include <ostream>
#include <string>
using namespace std;
namespace
{
volatile sig_atomic_t quit;
void signal_handler(int sig)
{
signal(sig, signal_handler);
quit = 1;
}
}
int main()
{
signal(SIGINT, signal_handler);
signal(SIGTERM, signal_handler);
#ifdef SIGBREAK
signal(SIGBREAK, signal_handler);
#endif
/* etc */
while (!quit)
{
string s;
cin >> s;
cout << s << endl;
}
cout << "quit = " << quit << endl;
}
На *отклоняют базирующуюся систему, Вам, возможно, не действительно понадобился бы обработчик сигналов для этого для работы. Вы могли указать, что хотите проигнорировать вызов SIGINT
int main(void)
{
// Register to ignore the SIGINT signal (Ctrl+C)
signal(SIGINT, SIG_IGN);
while(1)
{
retval = my_blocking_io_func();
if(retval == -1 && errno == EINTR)
{
// do whatever you want to do in case of interrupt
}
}
}
Важный способ, которым это работает, состоит в том, чтобы распознать, что неблокирующиеся функции действительно становятся прерванными. Обычно, Вы поняли бы, что блокирующаяся неудавшаяся функция (например, читают ()) и повторно делает попытку функции. Если бы это было некоторое другое значение, то Вы приняли бы соответствующие связанные с ошибкой меры.
На *отклоняют, можно использовать signal
функционируйте для регистрации обработчика сигналов:
#include <signal.h>
void signal_handler(int sig)
{
// Handle the signal
}
int main(void)
{
// Register the signal handler for the SIGINT signal (Ctrl+C)
signal(SIGINT, signal_handler);
...
}
Теперь, каждый раз, когда кто-то поражает Ctrl+C, Ваш обработчик сигналов назовут.