使用ideone时如何传入命令行参数?

lif*_*nce 13 c++ python command-line

我正在使用ideone在线翻译(http://ideone.com/)来测试一些C++和Python程序.如何指定命令行参数而不是使用STDIN输入?

Ker*_* SB 9

看起来你不能,但快速黑客应该做的伎俩:

static char * const ARGV[] = { "myprog", "hello", "world", NULL };

int main(int argc, char * argv[])
{
    argc = 3;
    argv = ARGV;

    // ...
}
Run Code Online (Sandbox Code Playgroud)

或者将标准输入转换为args:

#include <vector>
#include <string>
#include <iterator>
#include <iostream>

std::vector<char *> fabricate(std::vector<std::string> & v)
{
    std::vector<char *> res(v.size() + 1, NULL);
    for (std::size_t i = 0; i != v.size(); ++i) { res[i] = &v[i][0]; }
    return res;
}

std::vector<std::string> args_vector((std::istream_iterator<std::string>(std::cin)), std::istream_iterator<std::string>());

std::vector<char *> argv_vector = fabricate(args_vector);


int main(int argc, char * argv[])
{
    argc = args_vector.size();
    argv = argv_vector.data();

    // ...
}
Run Code Online (Sandbox Code Playgroud)

  • @lifebalance:错误......“类似”?:-) (2认同)
  • @lifebalance:不,不,不.`使用namewhatever`是**不是**"通常".更喜欢"浓缩邪恶"! (2认同)

jle*_*ahy 5

在python中你可以像这样硬编码:

import sys

print sys.argv
sys.argv[1:] = ["test1", "test2"]
print sys.argv
Run Code Online (Sandbox Code Playgroud)

这将输出:

['prog.py']
['prog.py', 'test1', 'test2']
Run Code Online (Sandbox Code Playgroud)

从stdin读取:

import sys
import shlex

print sys.argv
sys.argv[1:] = shlex.split(None)
print sys.argv
Run Code Online (Sandbox Code Playgroud)