2011-11-22 75 views
3

在ipython(0.10.2)中,我想運行bash shell樣式(或glob.glob)擴展。我想要做一些這樣的事情,讓爭論擴大化,就像他們會在bash中一樣。這可能嗎?從ipython運行glob風格擴展?

filenames = !ls *.sbet 
run sbet.py $filenames 
# fails because filenames is a list 

# or the simpler case: 
run sbet.py *.sbet 
# failes with "*.sbet" being directly passed in without being expanded. 

建議?謝謝!

回答

7

filenames = !ls *.sbet返回是一個特殊列表,有一些額外的屬性:

  • filenames.l - 列表
  • filenames.s - 一個空格分隔字符串
  • filenames.n - 換行分隔字符串

做​​在IPython的更多信息。

所以要通過運行指定參數時,你想filenames.s

filenames = !ls *.sbet 
run sbet.py $filenames.s 

如果你有一個常規的列表,那麼你就需要自己把它變成一個字符串,傳遞給運行之前:

filenames = glob.glob('*.sbet') 
filenames_str = ' '.join(filenames) # you will need to add quotes if you allow spaces in filenames 
run sbet.py $filenames_str 

如果run foo.py *.sbet對您很有價值,那麼您可以在傳遞到%run時自動擴展文件球體的feature request

+0

太棒了,不知道這個關於ipython! :)(要找到所有很酷的東西的一些參考) –

+0

我剛剛在http://ipython.org/ipython-doc/dev/interactive/shell.html看到,也有.p選項,以獲得結果爲某種「路徑對象」,儘管我不知道這意味着什麼。 –