2016-02-27 58 views
0

在python中,我試圖做一些事情來輕鬆編譯c源代碼,包括這樣一行;在Python中不使用 n的新行

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

你的問題是什麼? – Goyo

+0

嘗試使用子進程進行此類調用 –

+0

使用'filename.strip()'。 – zondo

回答

2

你可能想從filename剝去換行符:

import os 
import subprocess 

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

filename[:-3]會從最後一個字符間距,返回整個字符串。顯然,最後3個字符是.c\n,這就是爲什麼你的格式化字符串中有一個換行符,因爲filename等於foo.c\n

爲了解決這個問題,我想你有兩個選擇:

1)從字符串filename.strip()(建議刪除\ N,特別是如果你使用的文件名通常爲這些目的)

2)使用filename[:-1]而不是filename

+0

現在我明白了,非常感謝 – onurctirtir

+0

@OnurTırtır隨時接受你發現最有用的答案,它會幫助其他人來解決這個問題尋求答案。 :) – Seanharrs

2

os.system已折舊,建議使用子進程代替。

將文件名分割爲「。」。即使文件擴展名不同,也能確保其正常工作。

如果你使用Python 3,我建議你使用格式。

import subprocess 

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