Fly Machine执行系统命令遇context deadline exceeded错误求助
问题分析与解决方法
这个超时错误确实是输入重定向导致的——Fly Machine的exec API不会自动启动shell来解析<这类重定向符号,它会把./program < input.txt整个当作命令和参数执行,结果程序启动后一直在等待标准输入(重定向逻辑未生效),最终触发超时。
以下是三种可行的解决方式:
方法1:用Shell包裹命令,让Shell处理重定向
修改API请求中的cmd字段,用sh -c包裹原命令,让Shell来解析重定向逻辑:
{ "cmd": "sh -c \"./program < input.txt\"" }
方法2:修改C++程序,直接读取指定文件
如果不想依赖Shell重定向,可以修改程序,让它通过命令行参数接收输入文件路径:
#include <string> #include <fstream> #include <iostream> int main(int argc, char* argv[]) { std::string input; if (argc >= 2) { // 从指定文件读取内容 std::ifstream file(argv[1]); if (file.is_open()) { std::getline(file, input); } else { std::cout << "Failed to open file: " << argv[1] << std::endl; return 1; } } else { // 兼容原逻辑:从标准输入读取 std::cout << "Please enter some text: "; std::getline(std::cin, input); } std::cout << "You entered: " << input << std::endl; return 0; }
编译后,API请求的cmd改为:
{ "cmd": "./program input.txt" }
方法3:通过API的stdin参数直接传递输入内容
如果输入内容可以提前获取,无需依赖本地文件,直接通过API的stdin字段传入内容:
{ "cmd": "./program", "stdin": "Hello, this is input from a file." }
内容的提问来源于stack exchange,提问作者Raaz
相关产品推荐
相关产品推荐

