在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
我的问题是为什么会发生这种情况,我应该怎么做以防止它?
答案 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])