标签: argv

单元测试模块在脚本中时sys.argv [1]出现问题

我有一个脚本可以执行各种操作并使用sys.argv访问参数,但是当脚本到达代码的unittest部分时,它说没有模块.我的脚本是:

class MyScript():

    def __init__(self):
        self.value = sys.argv[1]

    def hello(self):
        print self.value

    def suite(self):
        modules_to_test = ('external_sanity_onvif', 'starttest')
        alltests = unittest.TestSuite()
        for module in map(__import__, modules_to_test):
            alltests.addTest(unittest.findTestCases(module))
        return alltests


if __name__ == '__main__': 
    Run = MyScript()
    Run.hello()
    log_file = 'log_file.txt'
    test_file = open(log_file, "w") 
    runner = unittest.TextTestRunner(test_file)
    unittest.main(defaultTest='Run.suite', testRunner=runner)
Run Code Online (Sandbox Code Playgroud)

假设我./script.py Hello在命令行中输入.我得到的错误是:

AttributeError: 'module' object has no attribute 'Hello'
Run Code Online (Sandbox Code Playgroud)

如果我删除unittest模块,它的工作原理.此外,如果我删除testrunner日志并将其保留在:

unittest.main(defaultTest='Run.suite')
Run Code Online (Sandbox Code Playgroud)

这仍然不起作用.

谁能帮忙.

谢谢

我试过这个黑客,但它仍然试图阅读sys.argv.

project = sys.argv[4:]
sys.argv = sys.argv[0:4]
Run Code Online (Sandbox Code Playgroud)

我已经尝试了这一点,argv但它仍然厌倦了阅读额外的参数.

python unit-testing sys argv

11
推荐指数
2
解决办法
1万
查看次数

Node.js:process.argv与process.ARGV

我注意到Node定义了两者process.argvprocess.ARGV(大写).文档中没有提到后者,并且在目前为止我遇到的每一种情况都是相同的对象.

是否ARGV只是一个历史悠久的保持,或者它有一个目的?

javascript process argv node.js

11
推荐指数
1
解决办法
6156
查看次数

我可以使用<>运算符跳过整个文件吗?

以下Perl代码具有明显的低效率;

while (<>)
{
if ($ARGV =~ /\d+\.\d+\.\d+/) {next;}
... or do something useful
}
Run Code Online (Sandbox Code Playgroud)

代码将遍历我们不想要的文件的每一行.

关于这个特定脚本运行的文件的大小,这不太可能产生明显的差异,但是为了学习; 我怎么能破坏整个文件<>正在工作并转移到下一个?

这样做的目的是因为此脚本运行的服务器存储旧版本的应用程序,文件名中包含版本号,我只对当前版本感兴趣.

perl diamond-operator argv

10
推荐指数
3
解决办法
692
查看次数

如何从main()函数外部访问argv []?

我碰巧有几个函数通过argv[]数组访问程序的不同参数.现在,这些函数嵌套在main()函数内部,因为编译器提供了允许这种结构的语言扩展.

我想摆脱嵌套函数,以便可以在不依赖语言扩展的情况下实现互操作性.

首先我想到了一个数组指针,我会argv[]在程序启动时指向它,这个变量将在main()函数之外并在函数之前声明,以便它们可以被它们使用.

所以我声明了如下指针:

char *(*name)[];
Run Code Online (Sandbox Code Playgroud)

哪个应该是指向字符指针数组的指针.但是,当我尝试将其指向时,argv[]我会从不兼容的指针类型获得对赋值的警告:

name = &argv;
Run Code Online (Sandbox Code Playgroud)

可能是什么问题呢?你是否想过argv[]main()函数外部访问数组的另一种方法?

c argv command-line-arguments

10
推荐指数
2
解决办法
5529
查看次数

打印与命令行中的字符串匹配的列名

我想在awk或cut命令中输入字符串名称(即"COL2")并打印与该列标题字符串匹配的列.

数据文件如下所示:

COL1 COL2 COL3 COL4 COL5 COL6

a a b d c f

a d g h e f

c v a s g a
Run Code Online (Sandbox Code Playgroud)

如果我传入COL3,我希望它打印第三列,等等.我认为awk可能是最容易使用的东西,但切割也可以.我只是不确定如何去做这件事.

bash awk argv

10
推荐指数
1
解决办法
8223
查看次数

使用argc = 0执行进程

是否可以执行argc = 0的进程?我需要执行一个程序,但它的argc等于0是非常重要的.有没有办法做到这一点?我试图在命令行中放置2 ^ 32个参数,使其看起来好像argc = 0但是参数个数有一个最大限制.

c integer-overflow argv argc

10
推荐指数
2
解决办法
6896
查看次数

Char没有转换为int

出于某种原因,我的C程序拒绝将argv的元素转换为int,我无法弄清楚原因.

int main(int argc, char *argv[])
{

    fprintf(stdout, "%s\n", argv[1]);

    //Make conversions to int
    int bufferquesize = (int)argv[1] - '0';

    fprintf(stdout, "%d\n", bufferquesize);
}
Run Code Online (Sandbox Code Playgroud)

这是运行./test 50时的输出:

50

-1076276207

我试过删除(int),抛出一个*和一个&之间(int)和argv [1] - 前者给了我一个5而不是50,但后者给了我一个类似于上面的输出.删除 - '0'操作没有多大帮助.我也尝试先制作一个char = argv [1]然后首先使用转换来进行转换,这很奇怪,不管输入如何都给了我一个17.

我非常困惑.到底是怎么回事?

c argv

10
推荐指数
2
解决办法
3万
查看次数

argv [argc]是否等于NULL指针

我读了一篇文章(忘了URL),里面说的argv[argc]是一个NULL指针(包含\0).要检查是否真的我写了这段代码,是的,它存在.我不明白的是,为什么操作系统包含此NULL指针argv[argc].它对其他东西也有用吗?

int
main (int argc, char **argv){

    while (*argv)
        printf ("%s\n", *argv++);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c linux argv

10
推荐指数
2
解决办法
2142
查看次数

main中的python命令行参数,跳过脚本名称

这是我的剧本

def main(argv):
    if len(sys.argv)>1:
        for x in sys.argv:
            build(x)

if __name__ == "__main__":
    main(sys.argv)
Run Code Online (Sandbox Code Playgroud)

所以从我写的命令行 python myscript.py commandlineargument

我希望它跳过myscript.py和简单的运行commandlineargument通过commandlineargument(n)

所以我明白我的for循环没有考虑到这一点,但我该怎么做呢?

python for-loop sys argv command-line-arguments

10
推荐指数
1
解决办法
2万
查看次数

为什么main(int argc,char*argv [])有两个参数?

我一直认为这argc是标志结束的必要条件,argv但我只是argv[argc] == NULL按照定义学到了这一点.我认为这argc完全是多余的吗?如果是这样,我一直认为C以效率的名义取消冗余.我的假设是错误的还是背后的历史原因?如果原因是历史性的,你能详细说明吗?

c argv argc

10
推荐指数
1
解决办法
650
查看次数