在Python中不使用\ n的新行

时间:2016-02-27 23:45:23

标签: python unix ubuntu gcc compiler-errors

在python中,我试图轻松编译c源代码,包括这样的一行;

import os
os.system("gcc %s -o %s -ansi" %(filename, filename[:-3])

但它给了我错误;

sh: 2: -o: not found

要检查有什么问题,我试图这样做;

print("gcc %s -o %s -ansi" %(filename, filename[:-3]))

它给了我那个;

gcc foo.c
 -o foo -ansi

我的问题是为什么会发生这种情况,我应该怎么做以防止它?

3 个答案:

答案 0 :(得分:2)

您可能想要从filename删除换行符:

import os
import subprocess

filename = filename.strip()
subprocess.call(['gcc', filename, '-o', os.path.splitext(filename)[0], '-ansi'])

答案 1 :(得分:2)

filename[:-3]会将整个字符串与最后的 3 字符区分开来。显然,您的最后3个字符为.c\n,这就是您在格式化字符串中添加换行符的原因,因为filename等同于foo.c\n

为了解决这个问题,我想你有两个选择:

1)使用filename.strip()从字符串中删除\ n(建议,特别是如果您经常使用文件名用于这些目的)

2)使用filename[:-1]代替filename

答案 2 :(得分:2)

os.system被折旧,建议改用subprocess。

在“。”上拆分文件名。即使文件扩展名不同,也能确保它正常工作。

如果您使用的是Python 3,我建议您使用格式。

import subprocess

filename = filename.strip()
subprocess.call('gcc {} -o {} -ansi'.format(filename,filename.split(".")[0])