无法使用python的subprocess.call中的参数运行C代码

时间:2012-06-13 03:27:48

标签: python c subprocess

我是Python的新手,并试图找出一些东西。我正在尝试编写一个快速脚本来为我编写的C代码进行参数测试。

当我尝试使用subprocess.call来运行我的C代码时,找到我的部分。 C代码有一个参数,它是在代码本身内打开的文件的名称。

例如:

filename = myclass.path + myclass.inputname
subprocess.call(["./code", filename])

这将运行代码,并传递正确的文件名,但C代码根本不会读取文件中的任何信息。如果我传递的内容如下:

./code "filename"

到shell,其中“filename”实际上是我在python中使用print命令时打印的内容,它工作得很好。

仅仅为了完成,以下是我的C代码中相关的行:

in = fopen(argv[1], "r");
fscanf(in, "%s %d %d", variable1, &variable2, &variable3);

知道发生了什么事吗?

2 个答案:

答案 0 :(得分:1)

除了显而易见的,您没有检查fopen的结果(您使用的是绝对路径名吗?),您的fscanf是错误的。尝试:

fscanf(in, "%s %d %d", variable1, &variable2, &variable3);

另一种可能性是文件的格式不是fscanf所期望的 - 它特别挑剔,如果错误,很容易导致程序崩溃。

答案 1 :(得分:0)

printf("%s\n", argv[1]);添加到您的C代码将让您看到它正在接收的内容。文件名是否包含空格?您可能还想检查argv[2]以防万一。

另外,检查fopen()的返回值。是NULL吗? (在这种情况下,它无法打开文件)。